该文档用于记录平时项目,接单所用到的各种selenium api。
引入库
1 2 3 4 5 6 from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC
打开
1 2 3 4 5 6 7 8 9 10 11 chrome_path='./chromedriver.exe' option = webdriver.ChromeOptions() option.add_experimental_option('excludeSwitches' , ['enable-logging' ]) option.add_experimental_option('excludeSwitches' , ['enable-automation' ]) option.add_argument('log-level=3' ) option.add_argument("--window-size=1920,1080" ) driver = webdriver.Chrome(options=option,executable_path=chrome_path) driver.maximize_window()
其他的配置设置
1 2 3 4 5 6 7 option.add_argument("--no-sandbox" ) prefs = {'profile.managed_default_content_settings.images' : 2 } option.add_experimental_option('prefs' ,prefs) prefs = {'profile.default_content_settings.popups' : 0 , 'download.default_directory' : file_path} option.add_experimental_option('prefs' , prefs)
定位方法
1 2 3 4 5 6 driver.find_element_by_id("kw" ).send_keys("selenium" ) driver.find_element_by_name("wd" ).send_keys("selenium" ) driver.find_element_by_tag_name("input" ).send_keys("selenium" ) driver.find_element_by_class_name("s_ipt" ).send_keys("selenium" ) driver.find_element_by_css_selector("#kw" ).send_keys("selenium" ) driver.find_element_by_xpath("//input[@id='kw']" ).send_keys("selenium" )
上述方法将element
改为elements
则可以定位多个控件
隐性等待
1 2 wait = WebDriverWait(driver, 6 ) wait.until(EC.presence_of_element_located((By.XPATH, '//*[@_nk="hu7r11"]' )))
保存cookie和载入cookie
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 if not os.path.exists("login.json" ): driver.get('https://www.qyyjt.cn/' ) xx=input ('手动登录以后按回车' ) dictCookies = driver.get_cookies() print(dictCookies) jsonCookies = json.dumps(dictCookies) print(jsonCookies) with open ('login.json' ,'w' ) as f: f.write(jsonCookies) def load_cookies (driver ): with open ('login.json' ,'r' ,encoding='utf8' ) as f: listCookies = json.loads(f.read()) for cookie in listCookies: driver.add_cookie(cookie) return driver
定位标签页
1 2 handles = driver.window_handles driver.switch_to_window(handles[1 ])
滑动页面到指定元素上
1 2 choose_page2=driver.find_elements_by_xpath('//*[@id="lpBloc"]/li' ) driver.execute_script("arguments[0].scrollIntoView();" , choose_page2[-1 ])
webdriver 的各种操作方法
set_window_size()
设置浏览器的大小
back()
控制浏览器后退
forward()
控制浏览器前进
refresh()
刷新当前页面
clear()
清除文本
send_keys (value)
模拟按键输入
click()
单击元素
submit()
用于提交表单
get_attribute(name)
获取元素属性值
is_displayed()
设置该元素是否用户可见
size
返回元素的尺寸
text
获取元素的文本
get()
打开网址
quit()
退出并关闭webdriver
鼠标操作
ActionChains(driver)
构造ActionChains对象
context_click()
执行鼠标悬停操作
move_to_element(above)
右击
double_click()
双击
drag_and_drop()
拖动
move_to_element(above)
执行鼠标悬停操作
context_click()
用于模拟鼠标右键操作, 在调用时需要指定元素定位
perform()
执行所有 ActionChains
中存储的行为,可以理解成是对整个操作的提交动作
使用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 from selenium import webdriverfrom selenium.webdriver.common.action_chains import ActionChainselement= driver.find_element_by_link_text("设置" ) ActionChains(driver).move_to_element(element).perform() elem1=driver.find_element_by_link_text("搜索设置" ) elem1.click() elem2=driver.find_element_by_id("sh_1" ) elem2.click() elem3=driver.find_element_by_class_name("prefpanelgo" ) elem3.click()
下拉框
1 from selenium.webdriver.support.select import Select
select_by_value(“选择值”)
select标签的value属性的值
select_by_index(“索引值”)
下拉框的索引
select_by_visible_testx(“文本值”)
下拉框的文本值
使用方法:
1 2 sel = driver.find_element_by_xpath("//select[@id='nr']" ) Select(sel).select_by_value('50' )
截图
1 driver.get_screenshot_as_file("D:\\baidu_img.jpg" )