Selenium简介

官网(https://selenium-python.readthedocs.io/)

selenium原理

  • 对于每一个selenium脚本,一个http请求会被创建并且发送给浏览器的驱动(即chromeDriver.exe)。
  • 浏览器驱动中包含了一个HTTP Server,用来接收这些http请求
  • HTTP Server 接收到请求后根据请求来具体操纵对应的浏览器
  • 浏览器执行具体的测试步骤,并将步骤结果返回给HTTP Server
  • HTTP Server又将结果返回给Selenium的脚本,如果是错误的http代码我们就会在控制台看到对应的报错信息
  • 因为HTTP协议是一个浏览器和WEB服务器之间通信的标准协议,几乎每一种编程语言都提供了丰富的http libraries,这样就可以方便的处理客户端Client和服务器Server之间的请求request及响应response
  • WebDriver的结构就是C/S结构,WebDriver API相当于是客户端,而浏览器驱动是服务端
  • WebDriver基于的协议是 JSON Wire protocol,这个协议是在http协议的基础上,对http请求及响应的数据做了进一步的规范。在Client和Server之间,只要是基于 JSON Wire protocol 来传递数据,就与具体的脚本语言无关了。

安装

pip install selenium

浏览器

  • selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器
from selenium import webdriver
browser=webdriver.Chrome()
browser=webdriver.Firefox()
browser=webdriver.PhantomJS()
browser=webdriver.Safari()
browser=webdriver.Edge()
  • 浏览器初始化设置(Chrome浏览器为例)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('window-size=1920x3000') #指定浏览器分辨率
chrome_options.add_argument('--disable-gpu') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument('--hide-scrollbars') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加载图片, 提升速度
chrome_options.add_argument('--headless') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
chrome_options.binary_location = r"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" #手动指定使用的浏览器位置

driver=webdriver.Chrome(chrome_options=chrome_options)
driver.get('https://www.baidu.com')
print('hao123' in driver.page_source)

driver.close() #切记关闭浏览器,回收资源

基本使用

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By  # 选择器
from selenium.webdriver.common.keys import Keys # 键盘按键操作
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait # 等待页面加载某些元素

browser=webdriver.Chrome()
try:
    browser.get('https://www.baidu.com')

    input_tag=browser.find_element_by_id('kw')
    input_tag.send_keys('selenium')
    input_tag.send_keys(Keys.ENTER) #输入回车

    wait=WebDriverWait(browser,10)
    wait.until(EC.presence_of_element_located((By.ID,'content_left'))) #等到id为content_left的元素加载完毕,最多等10秒

    print(browser.page_source)
    print(browser.current_url)
    print(browser.get_cookies())

finally:
    browser.close()
posted @ 2019-09-17 10:58  日新其德止于至善  阅读(973)  评论(0编辑  收藏  举报