我正在制作一个类似这样的刮刀 - >
访问网站A - >点击立即购买按钮 - >登陆亚马逊 - >刮刮数据 - >回到网站A
问题是该网站是在AnugularJS上制作的。我无法使用selenium.click()
单击该按钮我正在使用selenium和scrapy来抓取这个javascript页面。 该页面是无限加载页面,请提出一个适用于无限加载页面的解决方案。
这是Div元素 -
<a class="external" href="http://www.amazon.com/dp/B01DBR53FU/?tag=097-20&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'
答案 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&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
以获取相应的子项,此代码即可使用。
在开始自动化之前,请先简要介绍一下如何在进入自动化之前创建,使用定位器。