前几天写过一篇文章,使用js来定位并操作网页上的下拉框,链接如下js通过xpath定位元素并且操作元素以下拉框select为例_小小爬虾的博客-CSDN博客
今天,要使用 selenium使用execute_script执行js代码控制操作下拉框并选择内容。
下拉框的样式如图:
手动点击一下Month如图:
F12看一下代码:
以操作Month为例,代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
month_select = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//*[@id="biRegMonth"]')))
js="""
arguments[0].options[5].selected = true;
function fireEvent(element, event) {
if (document.createEventObject) {
var evt = document.createEventObject();
return element.fireEvent('on' + event, evt)
} else {
var evt = document.createEvent('HTMLEvents');
evt.initEvent(event, true, true)
return !element.dispatchEvent(evt);
}
};
fireEvent(arguments[0], 'change');
"""
driver.execute_script(js,month_select)#python selenium 执行js代码,arguments[0]指的就是month_select
运行代码,下拉框就会选中并且显示相应月份。
提示:
(1)如果js代码很多,而且有函数的话,最好是先单独拿出来用三引号处理,赋给一个变量,这样比较清晰。
如果js代码不长,可以直接写入 driver.execute_script(参数1,参数2)的参数1中,不过要写成一行,并且最好语句之间都用英文的;隔开。
(2)js代码中涉及到的节点(也就是参数2表示的节点),要用arguments[0]来表示。