当前位置: 首页 > 科技观察

Python爬虫很强大,如何在爬虫中自动控制浏览器?

时间:2023-03-15 19:46:38 科技观察

概述:Python通过selenium爬取数据是一种有效的突破封锁的方法。但是selenium在使用中会遇到很多问题。本文以问答的形式普及一下如何通过selenium执行javascript程序,进而获取动态执行的网页。如果喜欢,欢迎转发本文。Python爬虫编程:用selenium执行javascript出错,怎么办?提问:小明开始学习python爬虫编程,仿佛整个互联网的数据都快要装进自己的口袋了。今天,他又尝试完成了一个高难度的动作。他想让selenium抓取下面的html,并自动执行js脚本,模仿鼠标自动执行点击动作。但令他失望的是,这没有用!尼亚拉莱戈,Sikonge,Ab-Titchaz和11otherslikethis.

这是他执行的代码。browser.execute_script("document.getElement(By.xpath(\"//div[@class='vbseo_liked']/a[contains(@onclick,'returnvbseoui.others_click(this)')]\")).click()")它不起作用,它没有响应。我做错了什么?伟大的Python答案:要点答案:使用selenium查找元素并将其传递给execute_script()以单击:link=browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick,"returnvbseoui.others_click(this)")]')browser.execute_script('arguments[0].click();',link)如果你想从头开始解决这个问题,那么这里有一些关于它的知识:我如何使用JavaScript模拟点击?这就是我所做的。这很简单,但它有效:(etype,true,false);el.dispatchEvent(evObj);}}用法:eventFire(document.getElementById('mytest1'),'click');如何在Python中模拟点击?首先制作一个自定义的Expected条件,等待元素被“执行”:._find_element(driver,self.locator).text.strip()returnnotelement_text.endswith(self.text)exceptStaleElementReferenceException:returnFalse定义完成后,如何在程序中调用这个类?看下面的代码:fromseleniumimportwebdriverfromselenium.common.exceptionsimportStaleElementReferenceExceptionfromselenium.webdriver.commonbyselenium.webdriver.common。webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasECclasswait_for_text_not_to_end_with(object):def__init__(self,locator,text):self.locator=locatorself。text=textdef__call__(self,driver):try:element_text=EC._find_element(driver,self.locator).text.strip()returnnotelement_text.endswith(self.text)exceptStaleElementReferenceException:returnFalsebrowser=webdriver.PhantomJS()浏览器.maximize_window()browser.get("http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html")username=browser.find_element_by_id("navbar_username")password=browser.find_element_by_name("vb_login_password_hint")username.send_keys("MarioP")password.send_keys("codeswitching")browser.find_element_by_class_name("loginbutton").click()wait=WebDriverWait(browser,30)wait.until(EC.visibility_of_element_located((By.XPATH,'//h2[contains(.,"Redirecting")]')))wait.until(EC.title_contains('Kenyan&Tanzanian'))wait.until(EC.visibility_of_element_located((By.ID,'postlist')))#click"11others"linklink=browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick,"returnvbseoui.others_click(this)")]')link.click()browser.execute_script("""functioneventFire(el,etype){if(el.fireEvent){el.fireEvent('on'+etype);}else{varevObj=document.createEvent('Events');evObj.initEvent(etype,true,false);el.dispatchEvent(evObj);}}eventFire(参数[0],"click");""",link)#waitforthe"div"nottoendwith"11otherslinkthis."wait.until(wait_for_text_not_to_end_with((By.CLASS_NAME,'vbseo_liked'),"11otherslikethis."))打印成功!!'browser.close()看,python中通过selenium爬取数据就是这么简单。掌握要点,开始编写自己的爬虫吧。