PYTHON SELENIUM运用execute_script(JS)选择页面下拉框&在输入框输入值

  • Post author:
  • Post category:python


By Mejias

网上有很多教程使用SELENIUM去操作页面下拉框并选中,比如


Select(web element).select_by_value(option)


。也有使用selenium对输入框输入内容,具体方法是两步:定位到输入框id,然后对输入框使用.send_keys()方法(


Driver.find_element(By.id,#id).send_keys()


)。由于个人之前写的一个工具定义了很多方法。(具体参照上篇文章)





Python Selenium 抓取Shadow Dom内部元素方法更新


icon-default.png?t=M1FB
https://blog.csdn.net/m0_55341949/article/details/121500244?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164508305416780261954890%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164508305416780261954890&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-121500244.first_rank_v2_pc_rank_v29&utm_term=PYTHON+SELENIUM%E6%8A%93%E5%8F%96shadow+dom+%E5%86%85%E9%83%A8%E5%85%83%E7%B4%A0%E6%96%B9%E6%B3%95%E6%9B%B4%E6%96%B0&spm=1018.2226.3001.4187



其中习惯性耶使用了很多Driver.execute_script()的方法来执行JS语句,在持续维护开发工具中增加了上面两个需要,所以想通过python运行JS语句去实现这两个功能。

这样操作的好处在上篇文章也有说过,主要有不需要很多的等待时间,也不用写许多的wait.until的代码,因为是对DOM的文档内容的读取,速度上显得快了许多。


这两个的网页源码如下所示:


一:JS代码对下拉框的操作

上面的网页源代码表示这两个元素也是在shadow树内部,具体如何操作的解释在上篇文章有提及




Python Selenium 抓取Shadow Dom内部元素方法更新


icon-default.png?t=M1FB
https://blog.csdn.net/m0_55341949/article/details/121500244?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164508305416780261954890%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164508305416780261954890&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-121500244.first_rank_v2_pc_rank_v29&utm_term=PYTHON+SELENIUM%E6%8A%93%E5%8F%96shadow+dom+%E5%86%85%E9%83%A8%E5%85%83%E7%B4%A0%E6%96%B9%E6%B3%95%E6%9B%B4%E6%96%B0&spm=1018.2226.3001.4187




对下拉单使用JS代码可以先在JS代码中先定位到select type的ID,然后使用属性options[index]定位到需要选择的下拉框。如上面源码表示“SearchPage”在第一个,那么index就是0。同时将选中的下拉框的selected属性赋值为True这样就保证它已经被选中了。

def control_in_shadow(driver,js):
    shadow = driver.execute_script(js)
    return shadow
jsS = 'document.querySelector("#ra-shadow-root").shadowRoot.getElementById("ra-asin-list-source-selector").options[0].selected=true'
select_id = control_in_shadow(driver,jsS)


二、JS代码对输入框输入值的操作

上面的网页源代码表示这两个元素也是在shadow树内部,具体如何操作的解释在上篇文章有提及




Python Selenium 抓取Shadow Dom内部元素方法更新


icon-default.png?t=M1FB
https://blog.csdn.net/m0_55341949/article/details/121500244?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164508305416780261954890%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164508305416780261954890&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-121500244.first_rank_v2_pc_rank_v29&utm_term=PYTHON+SELENIUM%E6%8A%93%E5%8F%96shadow+dom+%E5%86%85%E9%83%A8%E5%85%83%E7%B4%A0%E6%96%B9%E6%B3%95%E6%9B%B4%E6%96%B0&spm=1018.2226.3001.4187



对输入框使用JS代码输入特定值的方法是,先在JS代码内部定位到input box的id,然后使用它的value属性,将需要输入的值赋值给这个属性即可。

def control_in_shadow(driver,js):
    shadow = driver.execute_script(js)
    return shadow
js1 = 'return document.querySelector("#ra-shadow-root").shadowRoot.getElementById("ra-asin-list-count-input").value=1000'
#shadow= control_in_shadow(driver,js)
input_id = control_in_shadow(driver,js1)



版权声明:本文为m0_55341949原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。