我正试图从以下网站获取塞浦路斯所有住宿的链接: http://www.zoover.nl/cyprus
到目前为止,我可以检索到已经显示的前15个。所以现在我必须调用“volgende”链接上的点击。但是,我不知道如何做到这一点,在源代码中,我无法跟踪调用的函数以使用,例如张贴在此处的内容: Issues with invoking "on click event" on the html page using beautiful soup in 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()'
我得到以下错误:
selenium.common.exceptions.StaleElementReferenceException:消息:元素不再附加到DOM 堆栈跟踪: 在fxdriver.cache.getElementAt(resource://fxdriver/modules/web element cache.js:8956) at Utils.getElementAt(文件:///var/folders/n4/fhhhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_u/extensions/fxdriver@googlecode.com/components/command processor.js:8546) 在fxdriver.preconditions.visible上(文件:///var/folders/n4/fhhhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_u/extensions/fxdriver@googlecode.com/components/command processor.js:9585) at DelayedCommand.prototype.checkPreconditions(文件:///var/folders/n4/fhhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_u/extensions/fxdriver@googlecode.com/components/command processor.js:12257) at DelayedCommand.prototype.executeInternal_u/h(文件:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_u/extensions/fxdriver@googlecode.com/components/command processor.js:12274) at DelayedCommand.prototype.executeInternal(文件:///var/folders/n4/fhvhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_u/extensions/fxdriver@googlecode.com/components/command processor.js:12279) at DelayedCommand.prototype.execute/<;(文件:///var/folders/n4/fhhqlmx23s8ppxbrxrpws3c0000gn/T/tmpKFL43_u/extensions/fxdriver@googlecode.com/components/command processor.js:12221)
我很困惑:
我尝试了下面的代码,并能够加载下一页。希望这对你也有帮助。 代码:
谢谢
虽然尝试使用Beautifulsoup的
evaluateJavaScript
方法来实现这一点很有诱惑力,但最终Beautifulsoup是一个parser而不是一个交互式的web浏览客户端。您应该认真考虑使用硒来解决这个问题,如this answer所示。有相当好的Python bindings可用于硒。
您可以使用selenium找到元素并单击它,然后将页面传递给Beautifulsoup,并使用现有代码获取链接。
或者,可以使用onclick处理程序中列出的Javascript。我从源代码中提取了这个:
EntityQuery('Ns=pPopularityScore%7c1&No=30&props=15292&dims=530&As=&N=0+3+10500915');
。每个页面的No
参数以15递增,但是props
让我猜测。不过,我建议不要这么做,只要像客户一样使用selenium与网站交互就行了。这对他们这边的变化也更加有力。相关问题 更多 >
编程相关推荐