【发布时间】: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"> Single Draw</option>
<option value="2"> 2 Consecutive</option>
<option value="3"> 3 Consecutive</option>
<option value="4"> 4 Consecutive</option>
<option value="5"> 5 Consecutive</option>
<option value="10">10 Consecutive</option>
<option value="20">20 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 Consecutive</option>')", elem)
我的目标是将选项标签第一部分中的值编号从:
<option selected="selected" value="1"> Single Draw</option>
到这里:
<option selected="selected" value="44"> 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"> &snbsp;draws </option>')""", get_draws)
结果如下:
<option value="20" select="<option selected="selected" value="nod"> &nbsp;&snbsp;draws </option>">20 Consecutive</option>
我尝试注入的 javascript 在我尝试修改的元素中间被注入(注意选项序列在第一个括号中间重复)。
我怎样才能纠正它,使它看起来像这样:
<option selected="selected" value="a number I am trying to change"> 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