使用 Selenium 更改 Python 中的元素

Change Element in Python using Selenium

我一直在研究一种更改网页元素的方法,但尚未找到(或理解)如何进行。 在上面的元素中,我希望能够将 的数值更改为另一个由占位符表示的数字(即点头表示抽奖次数。还是我每次 运行 程序时都必须手动执行此操作? ).

我的 OS 是 Ubunt 18.04 并使用最新的 python、selenium 和 pycharm IDE.

这些只是我访问过的几个网站,而且我访问过很多。

https://www.youtube.com/watch?v=tdgAIDR9snc

http://allselenium.info/javascript-using-python-selenium-webdriver/

Set value of input instead of sendKeys() - selenium webdriver nodejs

网络元素:

<select name="ctl00$MainContent$ddlRange" id="ctl00_MainContent_ddlRange">
    <option selected="selected" value="1"> &nbsp;&nbsp;Single Draw</option>
    <option value="2"> &nbsp;&nbsp;2&nbsp;Consecutive</option>
    <option value="3"> &nbsp;&nbsp;3&nbsp;Consecutive</option>
    <option value="4"> &nbsp;&nbsp;4&nbsp;Consecutive</option>
    <option value="5"> &nbsp;&nbsp;5&nbsp;Consecutive</option>
    <option value="10">10&nbsp;Consecutive</option>
    <option value="20">20&nbsp;Consecutive</option>
</select>

我的基本代码是:

from Selenium import WebDriver

browser = webdriver.Chrome('/usr/bin/chromedriver')
page=browser.get("whatever address of whatever webpage interested in")

elem=browser.find_element_by_css_selector("#ctl00_MainContent_ddlRange")
browser.execute_script("arguments[0].setAttribute('<option selected="selected" value="20">','20&nbsp;Consecutive</option>')", elem)

我的目标是更改选项标签第一部分中的值编号:

<option selected="selected" value="1"> &nbsp;&nbsp;Single Draw</option>

对此:

<option selected="selected" value="44"> &nbsp;&nbsp;Single Draw</option>

在 execute_script 中,我总是在最后一个 ) 之后得到期望的语句结束。 我还在 "selected" 和“20”

区域收到预期的“,”或“)”错误

css 和 xpath 选择器还有:

for <select name="ctl00$MainContent$ddlRange" id="ctl00_MainContent_ddlRange">
selector = #ctl00_MainContent_ddlRange
xpath    = //*[@id="ctl00_MainContent_ddlRange"]

for <option>
selector = #ctl00_MainContent_ddlRange > option:nth-child(1)   (note that nth-child() can be 1 - 7)
xpath    = //*[@id="ctl00_MainContent_ddlRange"]/option[1]     (note that option[] can also be 1 - 7)

我已将网页保存到光盘中,我可以进入 html 并更改那个数字,然后保存文件,当我单击它时,它就可以工作了。我只想让它自动化。

非常感谢任何帮助

创意

编辑:

到目前为止,这是我最接近于实际插入我想要的值的一次。新代码如下:

browser.execute_script("""arguments[0].setAttribute
('select', '<option selected="selected" value="nod"> &nbsp;&snbsp;draws </option>')""", get_draws)

结果:

<option value="20" select="<option selected=&quot;selected&quot; value=&quot;nod&quot;> &amp;nbsp;&amp;snbsp;draws </option>">20&nbsp;Consecutive</option>

我试图注入的 javascript 被注入到我试图修改的元素的中间(注意选项序列在第一个括号的中间重复)。

如何更正它使其看起来像这样:

<option selected="selected" value="a number I am trying to change"> &nbsp;&nbsp;Draw<\option>

编辑已解决:

弄清楚如何更改元素的值。我不得不将该元素的搜索方法更改为:

get_draws = browser.find_element_by_tag_name('option')

然后我的下一行很简单:

browser.execute_script("""arguments[0].setAttribute('value', '100')""", get_draws)

对于第二个问题,参数化 int 值,请尝试以下操作:

var = 100
js = f"arguments[0].setAttribute('value', '{var}')"
browser.execute_script(js, get_draws)

只需将您想要的值传递给 var 变量即可。