申请专栏作者
投稿发布
您的当前位置:主页 > yabo亚博体育下载 > 正文

Python爬虫很强大,在爬虫里如何自动操控浏览器呢?

来源:可思yabo88滚球 时间:2019-08-02
请点击下面的广告后浏览!

概述: 可思yabo88滚球sykv.com

yabo亚博体育下载 python通过selenium爬取yabo88滚球是很多突破封锁的有效途径。但在使用selenium中会遇到很多问题,本文就通过一问一答的形式来通熟易懂的普及如何通过selenium执行javascript程序,进而获取动态执行后的网页。如果你喜欢,欢迎转发本文。

可思yabo88滚球sykv.com,sykv.cn

可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

python爬虫编程:用selenium执行javascript出错了,该咋改? 可思yabo88滚球sykv.com

问题:

可思yabo88滚球sykv.com

小明开始学习python爬虫编程了,仿佛整个互联网的yabo88滚球都快被他纳入囊中了。今天,他又试图完成一个高难度动作,他想让selenium中抓取到以下HTML后,并自动执行js脚本,模仿鼠标自动执行一个点击动作。但令他很失望的是,居然,居然,没用!

可思yabo88滚球sykv.com

 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络 
  1. <>"vbseo_liked">?
  2. <>"http://www.jamiiforums.com/member.php?u=8355"?rel="nofollow">Nyaralego?
  3. ,?
  4. <>"http://www.jamiiforums.com/member.php?u=8870"?rel="nofollow">Sikonge?
  5. ,?
  6. <>"http://www.jamiiforums.com/member.php?u=8979"?rel="nofollow">Ab-Titchaz?
  7. and?
  8. <>"return?vbseoui.others_click(this)"?href="http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html#">11?others?
  9. like?this.?
?

这是他执行的代码。

可思yabo88滚球-www.sykv.cn,sykv.com

 可思yabo88滚球sykv.com,sykv.cn 
  1. browser.execute_script("document.getElement(By.xpath(\"//div[@class='vbseo_liked']/a[contains(@onclick,?'return?vbseoui.others_click(this)')]\").click()")?

它没用,没有反应。究竟做错了什么? 可思yabo88滚球sykv.com

Python大大的答案:

内容来自可思yabo88滚球sykv.com

要点回答: 可思yabo88滚球sykv.com,sykv.cn

使用selenium查找元素并将其传递execute_script()给单击: 可思yabo88滚球-www.sykv.cn,sykv.com

 
可思yabo88滚球sykv.com
  1. link?=?browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick,?"return?vbseoui.others_click(this)")]')?
  2. browser.execute_script('arguments[0].click();',?link)?

如果要从头解决这问题,那么以下就是需要了解它的一系列事情: 可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

  • 如何使用JavaScript模拟点击?

这就是我做的东西。这很简单,但它有效: 可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

 

可思yabo88滚球-AI,sykv.com智能驾驶,人脸识别,区块链,大yabo88滚球

  1. function?eventFire(el,?etype){?
  2. ?if?(el.fireEvent)?{?
  3. ?el.fireEvent('on'?+?etype);?
  4. ?}?else?{?
  5. ?var?evObj?=?document.createEvent('Events');?
  6. ?evObj.initEvent(etype,?true,?false);?
  7. ?el.dispatchEvent(evObj);?
  8. ?}?
  9. }?

用法:

可思yabo88滚球-yabo88滚球挖掘,智慧医疗,机器视觉,机器人sykv.com

 

内容来自可思yabo88滚球sykv.com

  1. eventFire(document.getElementById('mytest1'),?'click');?
  • 如何在Python里进行模拟点击呢?首先制定一个自定义的预期条件,等待元素被“执行”:
 
可思yabo88滚球sykv.com,sykv.cn
  1. class?wait_for_text_not_to_end_with(object):?
  2. ?def?__init__(self,?locator,?text):?
  3. ?self.locator?=?locator?
  4. ?self.text?=?text?
  5. ?def?__call__(self,?driver):?
  6. ?try?:?
  7. ?element_text?=?EC._find_element(driver,?self.locator).text.strip()?
  8. ?return?not?element_text.endswith(self.text)?
  9. ?except?StaleElementReferenceException:?
  10. ?return?False?

定义完毕后,如何在程序里调用这个类呢?看看以下代码:

可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络
 

可思yabo88滚球-AI,sykv.com人工智能,深度学习,机器学习,神经网络

  1. from?selenium?import?webdriver?
  2. from?selenium.common.exceptions?import?StaleElementReferenceException?
  3. from?selenium.webdriver.common.by?import?By?
  4. from?selenium.webdriver.support.ui?import?WebDriverWait?
  5. from?selenium.webdriver.support?import?expected_conditions?as?EC?
  6. class?wait_for_text_not_to_end_with(object):?
  7. ?def?__init__(self,?locator,?text):?
  8. ?self.locator?=?locator?
  9. ?self.text?=?text?
  10. ?def?__call__(self,?driver):?
  11. ?try?:?
  12. ?element_text?=?EC._find_element(driver,?self.locator).text.strip()?
  13. ?return?not?element_text.endswith(self.text)?
  14. ?except?StaleElementReferenceException:?
  15. ?return?False?
  16. browser?=?webdriver.PhantomJS()?
  17. browser.maximize_window()?
  18. browser.get("http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html")?
  19. username?=?browser.find_element_by_id("navbar_username")?
  20. password?=?browser.find_element_by_name("vb_login_password_hint")?
  21. username.send_keys("MarioP")?
  22. password.send_keys("codeswitching")?
  23. browser.find_element_by_class_name("loginbutton").click()?
  24. wait?=?WebDriverWait(browser,?30)?
  25. wait.until(EC.visibility_of_element_located((By.XPATH,?'//h2[contains(.,?"Redirecting")]')))?
  26. wait.until(EC.title_contains('Kenyan?&?Tanzanian'))?
  27. wait.until(EC.visibility_of_element_located((By.ID,?'postlist')))?
  28. #?click?"11?others"?link?
  29. link?=?browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick,?"return?vbseoui.others_click(this)")]')?
  30. link.click()?
  31. browser.execute_script("""?
  32. function?eventFire(el,?etype){?
  33. ?if?(el.fireEvent)?{?
  34. ?el.fireEvent('on'?+?etype);?
  35. ?}?else?{?
  36. ?var?evObj?=?document.createEvent('Events');?
  37. ?evObj.initEvent(etype,?true,?false);?
  38. ?el.dispatchEvent(evObj);?
  39. ?}?
  40. }?
  41. eventFire(arguments[0],?"click");?
  42. """,?link)?
  43. #?wait?for?the?"div"?not?to?end?with?"11?others?link?this."?
  44. wait.until(wait_for_text_not_to_end_with((By.CLASS_NAME,?'vbseo_liked'),?"11?others?like?this."))?
  45. print?'success!!'?
  46. browser.close()?

看,如何在python里通过selenium来爬取yabo88滚球就是这么简单。要点掌握好,开始编制自己的爬虫吧。

本文来自可思yabo88滚球(sykv.com),转载请联系本站及注明出处

网友评论:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片 匿名?
最新文章
热门文章
热点图文

关于我们?? 免责声明?? 广告合作?? 版权声明?? 联系方式?? 原创投稿?? 网站地图??

Copyright?2005-2019 Sykv.com 可思yabo88滚球 版权所有 ?? ICP备案:京ICP备14056871号

人工智能资讯?? 人工智能资讯?? 人工智能资讯?? 人工智能资讯

?扫码入群
咨询反馈
扫码关注

微信公众号

返回顶部
关闭