Javascript 使用beautifulsoup python调用onclick事件
我正在尝试从本网站获取塞浦路斯所有住宿的链接: 到目前为止,我可以检索已经显示的前15个。所以现在我必须调用点击“volgende”链接。但是,我不知道如何做到这一点,在源代码中,我无法跟踪调用以使用的函数,例如,此处发布的类似内容: 我只需要“点击”发生的步骤,这样我就可以获取接下来的15个链接等等 有人知道如何帮助吗? 已经谢谢你了 编辑: 我的代码现在看起来像这样:Javascript 使用beautifulsoup python调用onclick事件,javascript,jquery,python,beautifulsoup,pyqt4,Javascript,Jquery,Python,Beautifulsoup,Pyqt4,我正在尝试从本网站获取塞浦路斯所有住宿的链接: 到目前为止,我可以检索已经显示的前15个。所以现在我必须调用点击“volgende”链接。但是,我不知道如何做到这一点,在源代码中,我无法跟踪调用以使用的函数,例如,此处发布的类似内容: 我只需要“点击”发生的步骤,这样我就可以获取接下来的15个链接等等 有人知道如何帮助吗? 已经谢谢你了 编辑: 我的代码现在看起来像这样: def getZooverLinks(country): zooverWeb = "http://www.zoo
def getZooverLinks(country):
zooverWeb = "http://www.zoover.nl/"
url = zooverWeb + country
parsedZooverWeb = parseURL(url)
driver = webdriver.Firefox()
driver.get(url)
button = driver.find_element_by_class_name("next")
links = []
for page in xrange(1,3):
for item in parsedZooverWeb.find_all(attrs={'class': 'blue2'}):
for link in item.find_all('a'):
newLink = zooverWeb + link.get('href')
links.append(newLink)
button.click()'
我得到以下错误:
selenium.common.exceptions.StaleElementReferenceException:Message:元素不再附加到DOM
堆栈跟踪:
在fxdriver.cache.getElementAt(resource://fxdriver/modules/web-element-cache.js:8956)
at Utils.getElementAt(file:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command processor.js:8546)
在fxdriver.premissions.visible(file:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command processor.js:9585)
在DelayedCommand.prototype.CheckPremissions\u(file:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command processor.js:12257)
在DelayedCommand.prototype.executeInternal\uh处(file:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command processor.js:12274)
在DelayedCommand.prototype.executeInternal\u(file:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command processor.js:12279)
在DelayedCommand.prototype.execute/<(file:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command processor.js:12221)
我感到困惑:/虽然尝试使用Beautifulsoup的
evaluateJavaScript
方法来实现这一点很有诱惑力,但最终Beautifulsoup是一个互动的web浏览客户端,而不是一个互动的web浏览客户端
你应该认真考虑用硒来解决这个问题,如图所示。硒有相当好的可用性
您可以使用selenium查找元素并单击它,然后将页面传递给Beautifulsoup,并使用现有代码获取链接
或者,您可以使用onclick处理程序中列出的Javascript。我是从源代码中提取的:
EntityQuery('Ns=pPopularityScore%7c1&No=30&props=15292&dims=530&As=&N=0+3+10500915')代码>。No
参数每一页递增15,但是props
让我猜测。不过,我建议不要进入这个领域,而是像客户一样使用selenium与网站进行交互。这对他们的更改也更加健壮。我尝试了以下代码,并能够加载下一页。希望这对你也有帮助。
代码:
谢谢很好的提示,它似乎达到了我想要的效果。无论如何,有一个问题你可以帮我解决,那会是什么问题?对不起,我的互联网连接太慢,所以我经常按下按钮;)你可以在编辑下找到问题,一般来说,每个问题最好只讨论一个主题。。在任何情况下,在更改页面后,您似乎正在使用旧状态parsedZooverWeb
。相反,用另一个驱动程序替换对find\u all
的调用。通过类名称查找元素。非常感谢!抱歉把问题混在一起!这与原来的问题有关吗?只有在点击按钮后完成此操作才能获得soap结果,您可以使用以下代码:soup\u level2=BeautifulSoup(driver.page\u source,'html.parser')
from selenium import webdriver
import os
chromedriver = "C:\Users\pappuj\Downloads\chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
url='http://www.zoover.nl/cyprus'
driver.get(url)
driver.find_element_by_class_name('next').click()