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

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

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

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

Я использую селен и 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'

Какую языковую привязку вы используете - Python или Java?

demouser123 03.06.2018 16:58
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
1
152
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

".external"

или используя текст ссылки, который

"Check it out" 

Проблема возникает при нажатии

Abhijeet Pal 03.06.2018 18:21

какую ошибку вы получаете, когда используете их "с щелчком"?

Prany 03.06.2018 18:22

это сэр Element <a class = "external" href = ""> could not be scrolled into view

Abhijeet Pal 03.06.2018 19:22

какой браузер и версию драйвера вы используете?

Prany 03.06.2018 19:35

Браузер Sir Firefox

Abhijeet Pal 03.06.2018 19:52

Я прошу вас номера версий браузера и драйвера.

Prany 03.06.2018 19:52

Ой, извини! FireFox Quantum версия 60.0.1 (64 бит), а драйвер тоже влияет? Я не знаю, почему не могу нажать на кнопку. Может из-за тега ng-click?

Abhijeet Pal 03.06.2018 20:12

Версия драйвера должна быть синхронизирована с браузером, иначе работать не будет.

Prany 03.06.2018 21:49

ohk, а браузер открывает сайт загружается значит драйвера совместимы?

Abhijeet Pal 04.06.2018 06:51

Да, это важно. вот почему просят версию веб-драйвера

Prany 04.06.2018 07:09

Сэр, версия 3.9.0, и я получаю эту ошибку при нажатии на элемент Element <a class = "external" href = ""> could not be scrolled into view , это из-за тега ng?

Abhijeet Pal 04.06.2018 07:36

Сэр, я использую последнюю версию

Abhijeet Pal 04.06.2018 13:06

Да, сэр, я обновился до 3.12, все тот же от использования driver.find_element_by_css_selector('a.external') дает это сообщение <selenium.webdriver.firefox.webelement.FirefoxWebElement (session = "be6a6535-7db8-46fa-8a4d-c4ac0b5fe04b", element = "0f310fae-ae2e-4987-a5c2-bbae575acd2c")>

Abhijeet Pal 04.06.2018 13:56

какая у вас версия драйвера gecko?

Prany 04.06.2018 16:08

geckodriver-v0.20.1-win64

Abhijeet Pal 04.06.2018 16:48

Вызывает ли он ту же ошибку для CSS-селектора и текста ссылки, упомянутого в моем ответе? Я заметил, что вы использовали внешний

Prany 04.06.2018 17:30

Я использовал этот elm = driver.find_element_by_link_text('Check it out') driver.execute_script("arguments[0].click();", elm), он работал, но вместо того, чтобы попасть в Amazon, он перенаправляется на домашнюю страницу, не знаю, зачем вообще идея? На странице есть много кнопок «Проверить это», все нацелены на Amazon, ни одна из них не перенаправляет на домашнюю страницу!

Abhijeet Pal 04.06.2018 17:35
Ответ принят как подходящий
'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, чтобы получить соответствующий дочерний элемент, и этот код будет работать.

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

element_to_click.click() выдает эту ошибку - ElementNotInteractableException: Message: Element <a class = "external" href = ""> could not be scrolled into view
Abhijeet Pal 03.06.2018 18:20

Извините, сэр, он по-прежнему выдает ту же ошибку Element <a class = "external" href = ""> could not be scrolled into view

Abhijeet Pal 03.06.2018 19:21

Сэр, любая идея, почему я не могу нажать кнопку?

Abhijeet Pal 04.06.2018 13:10
driver.find_element_by_css_selector('a.external') выдает это сообщение <selenium.webdriver.firefox.webelement.FirefoxWebElement (session = "be6a6535-7db8-46fa-8a4d-c4ac0b5fe04b", element = "0f310fae-ae2e-4987-a5c2-bbae575acd2c")> Я не могу понять эти страницы JS
Abhijeet Pal 04.06.2018 13:45

см. Edit 3 в ответе

demouser123 04.06.2018 17:33

Отлично, это сработало, сэр, но вместо того, чтобы приземляться в Amazon, он перенаправляется на домашнюю страницу, на странице есть много кнопок проверки, все нацеленные на Amazon, но все же он перенаправляется на домашнюю страницу вот URL-адрес, пожалуйста, посмотрите thisiswhyimbroke.com/gifts/gifts-for-men

Abhijeet Pal 04.06.2018 17:38

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

demouser123 04.06.2018 17:53

Смотрите мою последнюю редакцию - вы можете использовать это, чтобы нажать на любую кнопку подарочной статьи

demouser123 04.06.2018 18:08

Спасибо, сэр, я смотрю на это, кстати, вы можете сказать, что это означает? - аргументы [0]

Abhijeet Pal 04.06.2018 18:15
quora.com/…
demouser123 04.06.2018 18:23

Большое спасибо, сэр, я был подавлен из-за этого с прошлой недели. Не могли бы вы дать мне несколько ресурсов, где я могу узнать больше?

Abhijeet Pal 05.06.2018 07:15

Другие вопросы по теме