selenium一个核心是WebDriver,WebDriver启动目标浏览器,并绑定到指定端口,而后与该端口直接进行通讯。php
安装selenium:css
pip install selenium
在使用的时候可能遇到下面的错误:html
'geckodriver' executable needs to be in PATH 'chromedriver' executable needs to be in PATH
说明须要driver,Firefox能够经过:geckodriver下载python
Chrome要先看一下对应的版本,在Chrome浏览器中输入:git
chrome://version/
而后能够到下面的地址下载对应版本的driver: chromedriver下载1github
下载以后最后放在path中,对于python来讲,能够放在安装目录的scripts目录下chrome
from selenium import webdriver browser = webdriver.Firefox() # browser = webdriver.Firefox(executable_path=r'C:\soft\lan\python3\Scripts\geckodriver.exe') # browser = webdriver.Chrome() browser.get("https://www.baidu.com/index.php?tn=monline_3_dg")
若是driver没有放在path目录中,那么就能够指定了driver的存放路径。npm
from selenium import webdriver driver = webdriver.Firefox() file_path = r'file:///F:\tmp\table.html' driver.get(file_path)
webdriver不单单能够打开本地的文件,这很是方便我调试。api
from selenium import webdriver import time SLEEP_TIME = 3 driver = webdriver.Firefox() file_path = r'file:///F:\tmp\table.html' driver.get(file_path) # 暂停一个时间,方便观察执行的操做 time.sleep(SLEEP_TIME) # 设置浏览器宽400、高400 driver.set_window_size(400, 400) time.sleep(SLEEP_TIME) # 将浏览器最大化显示 driver.maximize_window() time.sleep(SLEEP_TIME) driver.get("https://www.baidu.com/index.php?tn=monline_3_dg") time.sleep(SLEEP_TIME) # 回退一个页面 driver.back() time.sleep(SLEEP_TIME) # 前进一个页面 driver.forward() time.sleep(SLEEP_TIME) # 关闭当前窗口 driver.close() time.sleep(SLEEP_TIME) # 并关浏览器 driver.quit()
如上webdriver提供了不少操做浏览器的接口,通常比较少用,由于咱们不少时候都不但愿打开浏览器,只但愿获取结果。
# options = webdriver.FirefoxOptions() options = webdriver.ChromeOptions() options.headless = True # driver = webdriver.Firefox(options=options) driver = webdriver.Chrome(options=options)
若是不想打开浏览器,能够headless设置为True
不少时候,咱们但愿借助于JS的强大功能,因此咱们须要执行JS,好比咱们要滚动窗口,webdriver并无提供相应的接口,咱们就能够经过JS来实现。
from selenium import webdriver import time SLEEP_TIME = 3 driver = webdriver.Firefox() file_path = r'file:///F:\tmp\table.html' driver.get(file_path) time.sleep(SLEEP_TIME) # 将页面滚动条拖到底部 jsCode = r"document.documentElement.scrollTop=100000" driver.execute_script(jsCode) time.sleep(SLEEP_TIME) # 将滚动条移动到页面的顶部 jsCode = r"document.documentElement.scrollTop=0" driver.execute_script(jsCode) time.sleep(SLEEP_TIME) # 获取h1元素并隐藏,把nav的字体颜色修改成blue h1 = driver.find_element_by_tag_name('h1') nav = driver.find_element_by_id('nav') driver.execute_script(r'arguments[0].style.display="none";arguments[1].style.color="blue"', h1, nav) time.sleep(SLEEP_TIME) # 并关浏览器 driver.quit()
获取元素能够参考前面提到的获取元素的介绍,在JS中可使用arguments参数,arguments是一个数组,存放的就是传入的元素参数。
table.html的内容以下:
<!DOCTYPE html> <html> <head> <title>title</title> <style type="text/css"> #container{ height: 10000px } #nav{ height: 20px; width: 800px; font-size: 30px; color: red; } </style> </head> <body> <h1 name="th1">This is H1</h1> <div id="nav">nav</div> <div id="container"></div> <div>footer</div> </body> </html>