【问题标题】:Change Element in Python using Selenium使用 Selenium 在 Python 中更改元素
【发布时间】:2019-04-30 07:26:59
【问题描述】:

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

我的操作系统是 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 中,我总是在最后一个 ) 之后得到预期的语句结束。 在“选定”和“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)

【问题讨论】:

  • edit the question 将其限制为具有足够详细信息的特定问题,以确定适当的答案。避免一次问多个不同的问题。请参阅How to Ask 页面以获得澄清此问题的帮助。
  • 你需要转义'selected'和'20'周围的" "字符。
  • DebanjanB 我很抱歉在我认为对我的代码有影响的其他部分的想法漫无边际,但简单地说就是如何获得标签 [option selected="selected" value="2"]成为 [option selected="selected" value="34"] MateMrse 不确定我是否理解您转义 " " 字符的意思。
  • @idzireit 请用相关的 HTML 更新问题
  • DebanjanB 希望这是为您正确编辑。

标签: python-3.x selenium-webdriver element


【解决方案1】:

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

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

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

【讨论】:

  • 实际上是版主删除了答案。昨晚很晚,所以当我读到你的消息时,我想知道我是否这样做并试图取消删除它,但说版主删除了它。想知道为什么 ?哦,是的,顺便说一句,非常感谢。
猜你喜欢
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2022-01-27
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多