目录
简介
安装 selenium+chromedriver
selenium的调用
selemium的使用
搜索
窗口切换
设置代理
隐式等待与显示等待
元素的拖动
填充表单
webdriver补充
selenium最初是一个测试工具,而在爬虫中主要是为了解决requests无法直接执行JavaScript代码的问题
selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如:跳转,点击,切换页面等。
安装selenium:pip3 install selenium
chromedriver: 下载地址
一定要安装与浏览器版本相对应的chromedriver版本
selenium提供了8种搜索方式
搜索第一个元素搜索某种指定条件下的所有元素含义find_element_by_idfind_elements_by_id通过元素id定位find_element_by_namefind_elements_by_name通过元素name定位find_element_by_class_namefind_elements_by_class_name通过元素class_name定位find_element_by_xpathfind_elements_by_xpath通过元素xpath表达式定位find_element_by_css_selectorfind_elements_by_css_selector通过元素xss选择器定位find_element_by_tag_namefind_element_by_tag_name通过元素tag定位find_element_by_link_textfind_elements_by_link_text通过元素完整超链接定位find_element_by_partial_link_textfind_elements_by_partial_link_text通过元素部分超链接定位在使用selenium操控浏览器时,肯定涉及到窗口切换。这里我们通过JS来完成这个操作。
from selenium import webdriver driver = webdriver.Chrome(executable_path="C:\\software\chromedriver.exe") #调用浏览器打开百度 driver.get("https://www.baidu.com") #调用JS打开另一个窗口,但是没有切换过去 driver.execute_script("window.open('https://www.taobao.com')") #切换到新打开的窗口 driver.switch_to.window(driver.window_handles[1]) #切换到原来的窗口 driver.switch_to.window(driver.window_handles[0])在selenium当中除了简单的点击动作之外,还可以完成一些稍微复杂的动作。为了实现元素拖拽的目的,我们导入了ActionChains模块
函数含义click(on_element = None)单击鼠标左键content_click(on_element = None)点击鼠标右键click_and_hold(on_element = None)点击鼠标左键,按住不放double_click(on_element = None)双击鼠标左键drag_and_drop(source,target)拖拽到某个元素然后松开drag_and_drop_by_offset(source,xoffsert,yoffset)拖拽到某个坐标然后松开move_to_element(to_element)鼠标移动到某个元素move_to_offset(xoffser,yoffset)鼠标移动到距离当前位置(x,y)release(on_element = None)在某个元素位置松开鼠标perform()执行链中所有操作实例:
#导入ActionChains模块 from selenium.webdriver.common.action_chains import ActionChaions driver = webdriver.Chrome(executable_path = "C:\\chromedriver.exe") driver.get("https://www/.baidu.com") user = driver.find_element_to_id("username") #鼠标移动到id = “user”元素的位置 ActionChains(driver).move_to_element(user).perform()当我们碰到<select></select>标签的下拉框。Webdriver提供了一个叫Select的方法
<select id="status" class="form-control valid" onchange="" name = 'status'> <option value=""></option> <option value="0">草莓</option> <option value="1">菠萝</option> <option value="2">葡萄</option> <option value="3">西瓜</option> </select> from selenium.webdriver.support.ui import Select driver = Webdriver.Chrome() #找到name选项卡 select = Select(driver.find_element_by_name('status')) #以下是三种选择下拉框的方式,他可以根据索引/值/文字来选择。 select.select_by_index(1) select.select_by_value("0") select.select_by_visible_text("草莓") #index索引从0开始 #value是option标签的一个属性值,并不是显示在下拉框中的值 #visible_text实在option标签文本的值,是显示在下拉框的值
