环境搭建

Chrome浏览器 + chromedriver + selenium

选择浏览器版本

谷歌浏览器地址 https://www.chromedownloads.net/

选择驱动

切记不要点击帮助下面的“关于Google Chrome(G)”,否则就会自动升级
image.png
浏览器不要选择较新的版本,驱动可能还没更新或不稳定。

Selenium基础用法

  1. from selenium import webdriver
  2. from lxml import etree
  3. from time import sleep
  4. #实例化一个浏览器对象(传入浏览器的驱动成)
  5. bro = webdriver.Chrome(executable_path='./chromedriver')
  6. #让浏览器发起一个指定url对应请求
  7. bro.get('http://125.35.6.84:81/xk/')
  8. #page_source获取浏览器当前页面的页面源码数据
  9. page_text = bro.page_source
  10. #解析企业名称
  11. tree = etree.HTML(page_text)
  12. li_list = tree.xpath('//ul[@id="gzlist"]/li')
  13. for li in li_list:
  14. name = li.xpath('./dl/@title')[0]
  15. print(name)
  16. sleep(5)
  17. bro.quit()

Selenium自动化

  1. from selenium import webdriver
  2. from time import sleep
  3. bro = webdriver.Chrome(executable_path='./chromedriver')
  4. bro.get('https://www.taobao.com/')
  5. #标签定位
  6. search_input = bro.find_element_by_id('q') # 比较推荐find_element_by_xpath
  7. #标签交互
  8. search_input.send_keys('Iphone')
  9. #执行一组js程序
  10. bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
  11. sleep(2)
  12. #点击搜索按钮
  13. btn = bro.find_element_by_css_selector('.btn-search')
  14. btn.click()
  15. bro.get('https://www.baidu.com')
  16. sleep(2)
  17. #回退
  18. bro.back()
  19. sleep(2)
  20. #前进
  21. bro.forward()
  22. sleep(5)
  23. bro.quit()
  1. # 动作链和iframe处理
  2. from selenium import webdriver
  3. from time import sleep
  4. #导入动作链对应的类
  5. from selenium.webdriver import ActionChains
  6. bro = webdriver.Chrome(executable_path='./chromedriver')
  7. bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
  8. #如果定位的标签是存在于iframe标签之中的则必须通过如下操作在进行标签定位
  9. bro.switch_to.frame('iframeResult')#切换浏览器标签定位的作用域
  10. div = bro.find_element_by_id('draggable')
  11. #动作链
  12. action = ActionChains(bro)
  13. #点击长按指定的标签
  14. action.click_and_hold(div)
  15. for i in range(5):
  16. #perform()立即执行动作链操作
  17. #move_by_offset(x,y):x水平方向 y竖直方向
  18. action.move_by_offset(17,0).perform()
  19. sleep(0.5)
  20. #释放动作链
  21. action.release()
  22. bro.quit()

规避检测

  1. from selenium import webdriver
  2. from time import sleep
  3. #实现无可视化界面
  4. from selenium.webdriver.chrome.options import Options
  5. #实现规避检测
  6. from selenium.webdriver import ChromeOptions
  7. #实现无可视化界面的操作
  8. chrome_options = Options()
  9. chrome_options.add_argument('--headless')
  10. chrome_options.add_argument('--disable-gpu')
  11. #实现规避检测
  12. option = ChromeOptions()
  13. option.add_experimental_option('excludeSwitches', ['enable-automation'])
  14. #如何实现让selenium规避被检测到的风险
  15. bro = webdriver.Chrome(executable_path='./chromedriver',chrome_options=chrome_options,options=option)
  16. #无可视化界面(无头浏览器) phantomJs
  17. bro.get('https://www.baidu.com')
  18. print(bro.page_source)
  19. sleep(2)
  20. bro.quit()

模拟登录qq空间

  1. from selenium import webdriver
  2. from time import sleep
  3. bro = webdriver.Chrome(executable_path='./chromedriver')
  4. bro.get('https://qzone.qq.com/')
  5. bro.switch_to.frame('login_frame')
  6. a_tag = bro.find_element_by_id("switcher_plogin")
  7. a_tag.click()
  8. userName_tag = bro.find_element_by_id('u')
  9. password_tag = bro.find_element_by_id('p')
  10. sleep(1)
  11. userName_tag.send_keys('598779794')
  12. sleep(1)
  13. password_tag.send_keys('123456789')
  14. sleep(1)
  15. btn = bro.find_element_by_id('login_button')
  16. btn.click()
  17. sleep(3)
  18. bro.quit()