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

时间:2018-06-03 14:29:04

标签: javascript selenium scrapy

我正在制作一个类似这样的刮刀 - >

访问网站A - >点击立即购买按钮 - >登陆亚马逊 - >刮刮数据 - >回到网站A

问题是该网站是在AnugularJS上制作的。我无法使用selenium.click()

单击该按钮

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

这是Div元素 -

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

我尝试的语法是,

 sel.xpath('//*[@class="button"]').click()

返回,

'SelectorList' object has no attribute 'click'

2 个答案:

答案 0 :(得分:1)

您可以使用

中的CSS Selector
".external"

或使用

的链接文字
"Check it out" 

答案 1 :(得分:1)

'SelectorList' object has no attribute 'click'

表示click方法不适用于xpath返回的元素。

试试这个 - 在Python中

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

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点击发送到此定位器

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

编辑4:仔细查看此编辑。点击此页面上的任何礼品项目非常简单

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生成的,因为这是一个Angular网页。所有显示的礼物都存在于article标记内。

如果您想点击第二个或第三个或任何其他文章按钮,您只需更改article:nth-child以获取相应的子项,此代码即可使用。

在开始自动化之前,请先简要介绍一下如何在进入自动化之前创建,使用定位器。