Issue
I'm trying to pass some variables to js executor, but no luck. I've tried just about everything, but although it prints variables, the executor just doesn't do anything on webpage.
Here's the code:
strings = ["ABC","DEF"]
elems = [i.text for i in driver.find_elements_by_xpath(title)]
import itertools
from json import dumps
for string, elem in zip(strings, elems):
print(string, elem)
driver.execute_script("arguments[0].innerHTML = '{}'".format(string), elem)
# driver.execute_script("arguments[0].innerHTML = ' + dumps(string)'", elem)
# driver.execute_script("arguments[0].innerHTML = arguments[1]", string, elem)
time.sleep(2)
Solution
If you want to use innerHTML
then you should use i
instead of i.text
.
And if you want to use arguments[1]
then you have to use values in execute_script(...)
in different order elem,string
instead of string,elem
from selenium import webdriver
url = 'http://stackoverflow.com/'
driver = webdriver.Firefox()
driver.get(url)
strings = ["ABC", "DEF"]
title = '//title'
elems = driver.find_elements_by_xpath(title)
for string, elem in zip(strings, elems):
print(string, elem)
# WORKS
#driver.execute_script("arguments[0].innerHTML = '{}'".format(string), elem)
# WORKS - needs different order `elem, string` instead of `string, elem`
driver.execute_script("arguments[0].innerHTML = arguments[1]", elem, string)
#time.sleep(2)
BTW:
If you want to append new text to existing title
then you should use
"arguments[0].text += arguments[1]"
It may need also to add space between old and new text
"arguments[0].text += ' ' + arguments[1]"
Answered By - furas
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.