首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在提供angular JavaScript数据的页面上执行Scrapy和Selenium?

如何在提供angular JavaScript数据的页面上执行Scrapy和Selenium?
EN

Stack Overflow用户
提问于 2018-06-03 22:29:04
回答 2查看 174关注 0票数 0

我正在做一个类似于这个->的刮刀

访问站点A -->单击立即购买按钮-->登陆亚马逊-->抓取数据-->返回站点A

问题是网站是在AnugularJS上创建的。我无法使用selenium.click()单击该按钮

我正在使用selenium和scrapy来抓取这个javascript页面。该页面是无限加载的页面,请建议一个解决方案,这是无限加载的页面。

下面是Div元素-

代码语言:javascript
复制
<a class="external" href="http://www.amazon.com/dp/B01DBR53FU/?tag=097-20&amp;ascsubtag=v7_3_3_3m7_2nhz_0_x01_-srt5-" target="_blank" analytics-on="click" analytics-event="button" analytics-category="outbound" analytics-label="non-lethal-salt-firing-self-defense-gun" ng-click="click(post)" rel="nofollow">Check it out </a>

我尝试的语法是,

代码语言:javascript
复制
 sel.xpath('//*[@class="button"]').click()

它返回,

代码语言:javascript
复制
'SelectorList' object has no attribute 'click'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-03 23:03:48

代码语言:javascript
复制
'SelectorList' object has no attribute 'click'

意味着click方法不能处理由xpath返回的元素。

尝试一下-在Python中

代码语言:javascript
复制
    element_to_click = self.driver.find_element_by_css_selector('a.external')
 driver.execute_script("arguments[0].scrollIntoView(true);",element_to_click)
    element_to_click.click()

代码语言:javascript
复制
element_to_click = 

    self.driver.find_element_by_xpath("//a[contains(@href,'http://www.amazon.com/dp/B01DBR53FU/?tag=097-20&amp;ascsubtag=v7_3_3_3m7_2nhz_0_x01_-srt5-')]")
#assuming that the href doesn't change.  


driver.execute_script("arguments[0].scrollIntoView(true);",element_to_click) 



# scroll element into view   

element_to_click.click()

您可以使用另一个答案中提到的linkText。

编辑3:尝试向此定位器发送JS点击

代码语言:javascript
复制
driver.execute_script("arguments[0].click();",element_to_click) 

编辑4:请仔细查看此编辑。点击此页面上的任何礼物物品都非常容易

代码语言:javascript
复制
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
chrome_path  = 'your chromedriver path here'


driver = webdriver.Chrome(chrome_path)

driver.get("http://thisiswhyimbroke.com/gifts/gifts-for-men/")
time.sleep(5)

#clicks on the first gift article
first_article = driver.find_element_by_css_selector('#page-gifts > article:nth-child(1) > div.button > a')
first_article.click()
time.sleep(5)

所有提到的礼物文章都是由repeater生成的,因为这是一个角度网页。所有显示的礼物都在一个article标签中。

如果您想要单击第二个或第三个或任何其他文章按钮,您只需更改article:nth-child以获得相应的子级,此代码就可以工作。

在开始自动化之前,请先简单阅读一下如何创建、使用定位器,然后再开始自动化。

票数 1
EN

Stack Overflow用户

发布于 2018-06-03 22:52:49

您可以使用CSS选择器,它是

代码语言:javascript
复制
".external"

或通过使用链接文本,

代码语言:javascript
复制
"Check it out" 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50667446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档