目录
Selenium 是最广泛使用的开源 Web UI(用户界面)自动化测试套件之一。Selenium 支持的语言包括C#,Java,Perl,PHP,Python 和 Ruby。目前,Selenium Web 驱动程序最受 Python 和 C#欢迎。 Selenium 测试脚本可以使用任何支持的编程语言进行编码,并且可以直接在大多数现代 Web 浏览器中运行。在爬虫领域 selenium 同样是一把利器,能够解决大部分的网页的反爬问题。下面就进入正式的 study 阶段。
pip install selenium
- # 声明浏览器对象
-
- # 导入selenium模块
- from selenium import webdriver # webdriver 网络驱动
-
- chrome = webdriver.Chrome() # 谷歌浏览器
- firefox = webdriver.Firefox() # 火狐浏览器
- edge = webdriver.Edge() # Edge浏览器
- phantomjs = webdriver.phantomjs() # phantomjs浏览器
- safari = webdriver.Safari() # 苹果浏览器
使用webdriver方法声明浏览器对象,会返回一个浏览器对象,后面所有的操作都是在此对象上进行操作的。
需要注意的是,在使用selenium打开浏览器前,需要下载相对应的浏览器驱动才能使用,下载教程网上有很多,这里就不过多介绍了。
chrome.get(url)
使用get方法向某个url发送get请求。
在最新版本中,使用selenium获取节点只有两个方法
需要传入两个参数,第一个参数为使用哪个方法进行查找,第二个参数表示具体的值。
支持使用使用下列方法获取节点:
- ID = "id"
- XPATH = "xpath"
- LINK_TEXT = "link text"
- PARTIAL_LINK_TEXT = "partial link text"
- NAME = "name"
- TAG_NAME = "tag name"
- CLASS_NAME = "class name"
- CSS_SELECTOR = "css selector"
by_link_text和by_partial_link_tex的区别:全部文本和包含某个文本
如:
- from selenium.webdriver.common.by import By
-
- input = browser.find_element(By.ID, "q")
find_element和find_elements的区别:
多了个s就返回列表,没有s就返回匹配到的第一个标签对象
find_element匹配不到就抛出异常,find_elements匹配不到就返回空列表
text
获取文本值
location
获取该节点在页面的相对位置
获取标签名称
size
获取节点的大小,也就是宽和高
page_source
获取页面源代码
execute_script('js代码')
switch_to.window('标签')
跳转到某个标签。
一般这两个方法是同时使用的,先获取到全部标签页,然后通过索引指定跳转到某个标签页
iframe是html中常用的一种技术,也就是一个页面中嵌套了另外一个网页,selenium默认是访问不了frame中的内容的
解决方法:
需要注意的是,使用该方法后跳转到frame标签内容后,是无法获取frame标签外的元素的,需要获取当前标签页的句柄,然后切换到该句柄才可以获取frame标签外的元素
delete_cookie("需要删除的名字")
删除某一条cookie
delete_all_cookies()
删除全部cookie
很多页面都使用 ajax
技术,页面的元素不是同时被加载出来的,为了防止定位这些尚在加载的元素报错,可以设置元素等来增加脚本的稳定性。webdriver
中的等待分为 显式等待 和 隐式等待。
默认时间为0 如果selenium没有在DOM中找到节点,将继续等待,超出设定时间后,则抛出找不到节点的异常,并且隐式等待是全局性的,即运行过程中,如果元素可以定位到,它不会影响代码运行,但如果定位不到,则它会以轮询的方式不断地访问元素直到元素被找到,若超过指定时间,则抛出异常。
driver
:浏览器驱动
timeout
:超时时间,单位秒
设置一个超时时间,每个一段时间就去检测一次该元素是否存在,如果存在则执行后续内容,如果超过最大时间(超时时间)则抛出超时异常
引入WebDriverWait对象,指定最长等待时间,然后调用它的until方法,传入要等待的条件expected_conditions,如:
- driver = webdriver.Chrome()
- driver.get("https://www.taobao.com/")
- wait = WebDriverWait(driver, 10)
- input1 = wait.until(EC.presence_of_element_located((By.ID, "q")))
后退
前进
- # 实例化配置对象
- options = webdriver.ChromeOptions() # 创建一个配置对象
- options.add_argument('--headless') # 开启无界面模式
- options.add_argument("--disable-gpu") # 禁用gpu
- options.add_argument("--proxy-server=http://202.20.16.82:9527") # 使用代理ip
- options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36")# 设置useragent
- # 添加配置对象
- driver = webdriver.Chrome(chrome_options=options)
有关selenium更多详细操作看下面链接