Как выполнить Scrapy и Selenium на странице, которая обслуживает данные из углового JavaScript? - PullRequest
0 голосов
/ 03 июня 2018

Я делаю скребок, который работает примерно так ->

Посетите сайт A -> нажимает кнопку "Купить сейчас" -> приземляется на Амазонке -> очищает данные -> назадна сайт A

Проблема в том, что сайт сделан на AnugularJS.Я не могу нажать кнопку с помощью selenium.click ()

Я использую селен и скрап для очистки этой страницы 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 голосов
/ 03 июня 2018
'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, поскольку это англоязычная веб-страница.Все показанные подарки присутствуют внутри тега article.

Если вы хотите нажать на вторую, третью или любую другую кнопку статьи, вам просто нужно изменить article:nth-child, чтобы получить соответствующий дочерний элемент, и этот код будет работать.

Перед вамиНачните автоматизацию, пожалуйста, кратко прочитайте о том, как вы можете создавать, использовать локаторы, прежде чем углубляться в автоматизацию.

0 голосов
/ 03 июня 2018

Вы можете использовать либо селектор CSS, который равен

".external"

, либо использовать текст ссылки, который равен

"Check it out" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...