Python爬虫的第二种姿势,Selenium框架案例讲解,


selenium使用流程:

1.环境安装:

  1. pip install selenium 

2.下载一个浏览器的驱动程序(谷歌浏览器)

3.实例化一个浏览器对象基本使用

代码

  1. from selenium import webdriver 
  2. from lxml import etree 
  3. from time import sleep 
  4.  
  5. if __name__ == '__main__': 
  6.  
  7.     bro = webdriver.Chrome(r"E:\google\Chrome\Application\chromedriver.exe") 
  8.     bro.get(url='http://scxk.nmpa.gov.cn:81/xk/') 
  9.  
  10.     page_text = bro.page_source 
  11.     tree = etree.HTML(page_text) 
  12.     li_list = tree.xpath('//*[@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() 

基于浏览器自动化的操作代码

#编写基于浏览器自动化的操作代码

  • 发起请求: get(url)
  • 标签定位: find系列的方法
  •  标签交互: send_ keys( 'xxx' )
  •  执行js程序: excute_script('jsCod')
  •  前进,后退: back(),forward( )
  •  关闭浏览器: quit()1

代码

  1. https://www.taobao.com/ 
  2.  
  3. from selenium import webdriver 
  4. from time import sleep 
  5.  
  6. bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe") 
  7.  
  8. bro.get(url='https://www.taobao.com/') 
  9.  
  10. #标签定位 
  11. search_input = bro.find_element_by_id('q') 
  12. sleep(2) 
  13. #执行一组js代码,使得滚轮向下滑动 
  14. bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') 
  15. sleep(2) 
  16. #标签交互 
  17. search_input.send_keys('女装') 
  18. button = bro.find_element_by_class_name('btn-search') 
  19. button.click() 
  20.  
  21. bro.get('https://www.baidu.com') 
  22. sleep(2) 
  23. bro.back() 
  24. sleep(2) 
  25. bro.forward() 
  26. sleep(5) 
  27. bro.quit() 

selenium处理iframe:

  •  如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)
  •  动作链(拖动) : from selenium. webdriver import ActionChains
  •  实例化一个动作链对象: action = ActionChains (bro)
  •  click_and_hold(div) :长按且点击操作
  •  move_by_offset(x,y)
  •  perform( )让动作链立即执行
  •  action.release( )释放动作链对象

代码

  1. https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable 
  2.  
  3. from selenium import webdriver 
  4. from time import sleep 
  5. from selenium.webdriver import ActionChains 
  6. bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe") 
  7.  
  8. bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable') 
  9.  
  10. bro.switch_to.frame('iframeResult') 
  11.  
  12. div = bro.find_element_by_id('draggable') 
  13.  
  14. #动作链 
  15. action = ActionChains(bro) 
  16. action.click_and_hold(div) 
  17.  
  18. for i in range(5): 
  19.     action.move_by_offset(17,0).perform() 
  20.     sleep(0.3) 
  21.  
  22. #释放动作链 
  23. action.release() 
  24.  
  25. bro.quit() 

selenium模拟登陆QQ空间

代码

  1. https://qzone.qq.com/ 
  2.  
  3. from selenium import webdriver 
  4. from time import sleep 
  5.  
  6.  
  7. bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe") 
  8. bro.get('https://qzone.qq.com/') 
  9. bro.switch_to.frame("login_frame") 
  10.  
  11. switcher = bro.find_element_by_id('switcher_plogin') 
  12. switcher.click() 
  13.  
  14. user_tag = bro.find_element_by_id('u') 
  15. password_tag = bro.find_element_by_id('p') 
  16. user_tag.send_keys('1234455') 
  17. password_tag.send_keys('qwer123') 
  18. sleep(1) 
  19.  
  20. but = bro.find_element_by_id('login_button') 
  21. but.click() 

无头浏览器和规避检测

代码

  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. #实现无可视化界面 
  9. chrome_options = Options() 
  10. chrome_options.add_argument('--headless') 
  11. chrome_options.add_argument('--disable-gpu') 
  12. #实现规避检测 
  13. option = ChromeOptions() 
  14. option.add_experimental_option('excludeSwitches',['enable-automation']) 
  15.  
  16. bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe",chrome_options=chrome_options,options=option) 
  17.  
  18. bro.get('https://www.baidu.com') 
  19. print(bro.page_source) 
  20. sleep(2) 
  21. bro.quit() 

评论关闭