Javascript 使用beautifulsoup python调用onclick事件

Javascript 使用beautifulsoup python调用onclick事件,javascript,jquery,python,beautifulsoup,pyqt4,Javascript,Jquery,Python,Beautifulsoup,Pyqt4,我正在尝试从本网站获取塞浦路斯所有住宿的链接: 到目前为止,我可以检索已经显示的前15个。所以现在我必须调用点击“volgende”链接。但是,我不知道如何做到这一点,在源代码中,我无法跟踪调用以使用的函数,例如,此处发布的类似内容: 我只需要“点击”发生的步骤,这样我就可以获取接下来的15个链接等等 有人知道如何帮助吗? 已经谢谢你了 编辑: 我的代码现在看起来像这样: def getZooverLinks(country): zooverWeb = "http://www.zoo

我正在尝试从本网站获取塞浦路斯所有住宿的链接:

到目前为止,我可以检索已经显示的前15个。所以现在我必须调用点击“volgende”链接。但是,我不知道如何做到这一点,在源代码中,我无法跟踪调用以使用的函数,例如,此处发布的类似内容:

我只需要“点击”发生的步骤,这样我就可以获取接下来的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()'
我得到以下错误:

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()