1.selenium
selenium是自动化测试工具,在python中引入selenium库,可调用webdriver来模拟使用浏览器人工访问网页,并完成各种交互
2.驱动下载
参考文章:selenium.common.exceptions.WebDriverException: Message: "chromedriver"解决
在使用selenium前,需要根据使用的浏览器下载对应的驱动,以Chrome为例:
- 查看自己的浏览器版本
- 到谷歌浏览器驱动下载网址下载版本最接近的驱动:
- 将下载好的驱动放到
C:\Program Files (x86)\Google\Chrome\Application
- 将下载好的驱动放到项目启动文件所在目录
3.selenium库的使用
3.1.基础使用
-
创建webdriver实例:
当程序执行到webdriver.Chrome()时,便会开启浏览器客户端
driver = webdriver.Chrome() # 设置超时时间为60s driver.set_script_timeout(60) driver.set_page_load_timeout(60)
-
driver.get(url)跳转到对应的网站
# 跳转到百度,不要遗漏前面的"https://" driver.get("https://www.baidu.com")
-
driver.find_element_by_xpath(xpath_str)获取元素
# 获取id为kw的HTML元素 element = driver.find_element_by_xpath(xpath_str)
-
element.get_attribute(attr_name)获取元素的属性
# 获取元素的id element_id = element.get_attribute("id") # 获取元素的class element_class = element.get_attribute("class") # 获取元素的标签内容(textContent) element_text_content = element.get_attribute("textContent")
3.2.进阶使用:按键模拟
-
键盘按键模拟:导入Keys模块后,输入下方指令
from selenium.webdriver.common.keys import Keys # 在element这个元素中按下回车 element.send_keys(Keys.ENTER)
按键字典如下:
Keys.BACK_SPACE # 回退键(BackSpace) Keys.TAB # 制表键(Tab) Keys.ENTER # 回车键(Enter) Keys.SHIFT # 大小写转换键(Shift) Keys.CONTROL # Control键(Ctrl) Keys.ALT # ALT键(Alt) Keys.ESCAPE # 返回键(Esc) Keys.SPACE # 空格键(Space) Keys.PAGE_UP # 翻页键上(Page Up) Keys.PAGE_DOWN # 翻页键下(Page Down) Keys.END # 行尾键(End) Keys.HOME # 行首键(Home) Keys.LEFT # 方向键左(Left) Keys.UP # 方向键上(Up) Keys.RIGHT # 方向键右(Right) Keys.DOWN # 方向键下(Down) Keys.INSERT # 插入键(Insert) DELETE # 删除键(Delete) NUMPAD0 ~ NUMPAD9 # 数字键1-9 F1 ~ F12 # F1 - F12键 (Keys.CONTROL, ‘a’) # 组合键Control+a,全选 (Keys.CONTROL, ‘c’) # 组合键Control+c,复制 (Keys.CONTROL, ‘x’) # 组合键Control+x,剪切 (Keys.CONTROL, ‘v’) # 组合键Control+v,粘贴
-
鼠标左键
左键很简单,直接调用element的click()即可:
# 在element这个元素中用鼠标左键一下 element.click()
复杂的按键、组合按键操作(如按住、拖拽、移动到某处等操作)则需要用到ActionChains,参考Python_Selenium之鼠标右键
-
调用js:driver.exectue_script(jsStr)
以滚动鼠标滚轮为例:
# 定义js:在id为"abc"的元素下,滚动鼠标滚轮到底部 jsStr = "document.getElementsById('abc').scrollTop=100000" # 调用js driver.execute_script(jsStr)