使用beautifulsoup python调用onclick事件

ste*_*eph 7 javascript python jquery beautifulsoup pyqt4

我试图从这个网站获取塞浦路斯所有住宿的链接:http : //www.zoover.nl/cyprus

到目前为止,我可以检索已显示的前 15 个。所以现在我必须点击“volgende”链接。但是,我不知道该怎么做,并且在源代码中,我无法找到调用的函数以使用例如此处发布的 sth: 在 html 页面上使用漂亮的汤在 Python 中调用“点击事件”的问题

我只需要发生“点击”的步骤,这样我就可以获取接下来的 15 个链接等等。

有人知道如何提供帮助吗?已经谢谢了!

编辑:

我的代码现在看起来像这样:

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()'
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

selenium.common.exceptions.StaleElementReferenceException:消息:元素不再附加到 DOM Stacktrace:在 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.preconditions.visible(file:///var/folders) /n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command-processor.js:9585) 在 DelayedCommand.prototype.checkPreconditions_ (file:///var/folders/n8lmx3brgtvc0mpx30rpx0rps/n4/fh30. /extensions/fxdriver@googlecode.com/components/command-processor.js:12257)在 DelayedCommand.prototype.executeInternal_/h(文件:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command-processor.js:12274) 在 DelayedCommand.prototype.executeInternal_ (file:///var/folders) /fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command-processor.js:12279) 在 DelayedCommand.prototype.execute/< (file:///var/folders/n4/fhx30sgtpn4/fhxflgtc30rps/n4/fhx30sgtwhq0 /extensions/fxdriver@googlecode.com/components/command-processor.js:12221)///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command-processor.js:12221)///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_/extensions/fxdriver@googlecode.com/components/command-processor.js:12221)

我糊涂了 :/

Joo*_*ost 6

虽然尝试使用 Beautifulsoup 的evaluateJavaScript方法来做到这一点可能很诱人,但最终 Beautifulsoup 是一个解析器,而不是一个交互式 Web 浏览客户端。

您应该认真考虑使用 selenium 解决这个问题,如本答案中简要所示。有非常好的Python 绑定可用于 selenium。

您可以使用 selenium 查找元素并单击它,然后将页面传递给 Beautifulsoup,并使用您现有的代码来获取链接。

或者,您可以使用在 onclick 处理程序中列出的 Javascript。我从来源中提取了这个:EntityQuery('Ns=pPopularityScore%7c1&No=30&props=15292&dims=530&As=&N=0+3+10500915');No每个页面的参数增加 15,但让props我猜测。不过,我建议不要涉足这个问题,而只是像客户一样使用 selenium 与网站进行交互。这对于他们方面的变化也更加稳健。


小智 6

我尝试了以下代码并能够加载下一页。希望这也能帮助你。代码:

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()
Run Code Online (Sandbox Code Playgroud)

谢谢