সেলেনিয়ামে জাভাস্ক্রিপ্ট কোডটির রিটার্ন মান পাওয়া Get


102

আমি আমার ওয়েবসাইটের কিছু স্বয়ংক্রিয় পরীক্ষার জন্য সেলেনিয়াম 2 ব্যবহার করছি এবং আমি জাভাস্ক্রিপ্টের কিছু কোডের রিটার্ন মান পেতে সক্ষম হতে চাই। foobar()আমার ওয়েবপৃষ্ঠায় যদি আমার একটি জাভাস্ক্রিপ্ট ফাংশন থাকে এবং আমি সেটিকে কল করতে এবং আমার পাইথন কোডে ফেরতের মান পেতে চাই, আমি এটি করতে কী ডাকতে পারি?

উত্তর:


166

কোনও মান ফেরত returnদেওয়ার জন্য, execute_script()পদ্ধতিটিতে পাস করা স্ট্রিংয়ে কেবল জাভাস্ক্রিপ্ট কীওয়ার্ডটি ব্যবহার করুন

>>> from selenium import webdriver
>>> wd = webdriver.Firefox()
>>> wd.get("http://localhost/foo/bar")
>>> wd.execute_script("return 5")
5
>>> wd.execute_script("return true")
True
>>> wd.execute_script("return {foo: 'bar'}")
{u'foo': u'bar'}
>>> wd.execute_script("return foobar()")
u'eli'

যদি ভেরিয়েবলটি জাভাস্ক্রিপ্ট দ্বারা সংজ্ঞায়িত না হয় তবে তার ফেরতের মান কী হবে? এটি ব্যতিক্রম বা কেবল একটি খালি স্ট্রিং ফেলে?
অ্যালেক্স

যদি ভেরিয়েবল সংজ্ঞায়িত না করা হয় তবে এটি ফিরে আসেNone
dbJones

7
এই নতুনদের জন্য দ্রষ্টব্য নোট, return_value = wd.execute_script("return {foo: 'bar'}")আপনার প্রোগ্রামে পরে ব্যবহারের জন্য ফেরত মান সংরক্ষণ করবে।
ntk4

1
ডক উল্লেখ অভাব আছে একটি Retruns: নোট। যদিও টিয়ার ব্যবহারের ক্ষেত্রে: নমুনায় তারা একটি জেএস রাখে যা নথির শিরোনামটি প্রদান করে। স্পষ্টভাবে retruns নির্দিষ্ট করা আরও ভাল : তাদের দস্তাবেজে
কাঠজ

7

নীচের উদাহরণ কোডের মতো কোনও ফাংশন হিসাবে আপনার স্নিপড কোড না থাকলেও আপনি মানগুলি ফিরিয়ে দিতে পারেন, কেবল return var;শেষে যেখানে ভেরিয়েবল আপনি ফিরে আসতে চান তা যুক্ত করে adding

result = driver.execute_script('''cells = document.querySelectorAll('a');
URLs = []
console.log(cells);
[].forEach.call(cells, function (el) {
    if(el.text.indexOf("download") !== -1){
    //el.click();
    console.log(el.href)
    //window.open(el.href, '_blank');
    URLs.push(el.href)
    }
});
return URLs''')

resultURLsএই ক্ষেত্রে যে অ্যারে থাকবে will

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.