Selenium模块

  • 便捷的获取网站中动态加载的数据
  • 便捷实现模拟登录

基于浏览器自动化的一个模块

selenium使用流程:

  • 模块安装
  • 下载驱动程序,chromedriver
  • 实例化一个浏览器对象
  • 编写实现自动化的代码
  1. # 药监局案例
  2. from selenium import webdriver
  3. from lxml import etree
  4. bro = webdriver.Chrome(executable_path='./chromedriver')
  5. # 让浏览器发起一个指定url请求
  6. bro.get('url')
  7. page_text = bro.page_source
  8. # 解析企业名称
  9. tree = etree.HTML(page_text)
  10. li_list = tree.xpath('//ul[@id="gzlist"]/li')
  11. for li in li_list:
  12. li.xpath('./dl/@title')[0]
  13. print(name)
  14. sleep(5)
  15. bro.quit()
  16. bro.get('https://www.taobao.com/')
  17. # 标签定位
  18. search_input = bro.find_element_by_id('q')
  19. # 标签交互
  20. search_input.send_keys('Iphone')
  21. # 点击搜索按钮
  22. btn = bro.find_element_by_css_selector('.btn-search')
  23. btn.click()
  24. sleep(5)
  25. bro.quit()

python+selenium自动化测试

设置鼠标,键盘事件

1、设置鼠标事件 (这些方法封装在ActionChains类中)

  1. from selenium.webdriver.common.action_chains import ActionChains
  2. #鼠标悬停
  3. above = driver.find_element_by_link_text('体育')ActionChains(driver).move_to_element(above).perform()
  4. #右键点击
  5. right_click = driver.find_element_by_link_text('科技')ActionChains(driver).context_click(right_click).perform()
  6. #双击事件
  7. double_click = driver.find_element_by_link_text('游戏')ActionChains(driver).double_click(double_click).perform()
  8. #鼠标拖放事件
  9. element = driver.find_element_by_link_text('汽车')
  10. #鼠标拖动的源元素
  11. target = driver.find_element_by_id('ww')
  12. #鼠标拖动的目标元素
  13. ActionChains(driver).drag_and_drop(element,target).perform()
  14. 6、将.py文件打包成exe文件用pip安装pyinstaller pip install pyinstaller然后点击需要打包的文件夹,右键+shift,在命令窗口输入pyinstaller -F 文件名.py 打包后的exe文件出现在 dist 文件夹中2、设置键盘事件(这些方法封装在Keys类中)
  15. from selenium.webdriver.common.keys import Keys
  16. #设置键盘事件 #键盘删除事件
  17. driver.find_element_by_id('kw').send_keys('Selenium2.00')time.sleep(5)driver.find_element_by_id('kw').send_keys(Keys.BACKSPACE)
  18. #空格事件
  19. driver.find_element_by_id('kw').send_keys(Keys.SPACE)time.sleep(5) driver.find_element_by_id('kw').send_keys('Selenium2.00')
  20. #全选事件
  21. driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'a') time.sleep(3)
  22. #复制事件
  23. driver.find_element_by_id('kw').send_keys(Keys.CONTROL,'c') time.sleep(3)driver.get(second_url='http://www.hao123.com')
  24. #粘贴事件
  25. driver.find_element_by_id('search-input').send_keys(Keys.CONTROL,'v') time.sleep(2)driver.find_element_by_class_name('button-hook').click()

模拟登录豆瓣

要点:

  • 要切换到iframe才能定位到里面的元素

第一阶段:中间需手动滑动验证码

  1. # encoding: utf-8
  2. """
  3. @author: linpions
  4. @software: PyCharm
  5. @file: 豆瓣网登录.py
  6. @time: 2021-12-27 19:55
  7. """
  8. import time
  9. import requests
  10. from selenium import webdriver
  11. url = "https://www.douban.com/"
  12. username = 'username'
  13. password = 'password'
  14. browser = webdriver.Chrome(r'C:\Users\Administrator\Desktop\LK_Projs\LearningSpider\selenium基础\chromedriver.exe')
  15. def login():
  16. """通过selenium登录豆瓣"""
  17. browser.get(url)
  18. time.sleep(2)
  19. browser.switch_to.frame(browser.find_element_by_tag_name('iframe')) # 切换到iframe
  20. # 找到密码登录的元素
  21. login_ele = browser.find_element_by_xpath('/html/body/div[1]/div[1]/ul[1]/li[2]')
  22. login_ele.click()
  23. username_ele = browser.find_element_by_xpath("//*[@id='username']")
  24. password_ele = browser.find_element_by_xpath("//*[@id='password']")
  25. username_ele.send_keys(username)
  26. password_ele.send_keys(password)
  27. submit_btn = browser.find_element_by_xpath("/html/body/div[1]/div[2]/div[1]/div[5]/a")
  28. submit_btn.click()
  29. time.sleep(2)
  30. cookies = browser.get_cookies()
  31. cookie_dict = {}
  32. for item in cookies:
  33. cookie_dict[item['name']] = item['value']
  34. print(browser.get_cookies()) # 获取登录后cookie
  35. res = requests.get(url, cookies=cookie_dict)
  36. print(res.text)
  37. if "bobby_liyao" in res.text:
  38. print("已经登录")
  39. if __name__ == '__main__':
  40. login()

第二阶段:待定

模拟登录B站—滑动验证码

破解方案:

  1. 鼠标移动到正确的元素上,显示出没有缺口的图片并下载
  2. 点击元素显示出有缺口的图片并下载
  3. 对比两张图片找出缺口的移动像素
  4. 拖动元素