javascript - 如何在从 Angular JavaScript 提供数据的页面上执行 Scrapy 和 Selenium?

标签 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'

最佳答案

'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获取相应的子项,此代码将起作用。

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

关于javascript - 如何在从 Angular JavaScript 提供数据的页面上执行 Scrapy 和 Selenium?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50667446/

相关文章:

python - Pyinstaller scrapy错误:

python - 如何在linux机器上安装Scrapy

javascript - 数据未插入 Firebase 数据库

javascript - 将 DOM 元素插入 React 组件

selenium - 范围报告不生成 html

java - 提交表单时,Selenium 发送 key 无法使用 java

python - 如何在程序中将参数传递给scrapy spider?

javascript - 为什么需要匿名函数来使用 setTimeout 保留 "this"

javascript - 考勤应用程序未捕获语法错误 : Unexpected token {

java - Java 中的递归问题。方法返回空列表