Я делаю скребок, который работает примерно так ->
Посетите сайт A -> нажмите кнопку "Купить сейчас" -> приземлится на Amazon -> очистить данные -> вернуться на сайт A
Проблема в том, что сайт сделан на AnugularJS. Я не могу нажать кнопку с помощью selenium.click ()
Я использую селен и 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'



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать любой CSS-селектор, который
".external"
или используя текст ссылки, который
"Check it out"
Проблема возникает при нажатии
какую ошибку вы получаете, когда используете их "с щелчком"?
это сэр Element <a class = "external" href = ""> could not be scrolled into view
какой браузер и версию драйвера вы используете?
Браузер Sir Firefox
Я прошу вас номера версий браузера и драйвера.
Ой, извини! FireFox Quantum версия 60.0.1 (64 бит), а драйвер тоже влияет? Я не знаю, почему не могу нажать на кнопку. Может из-за тега ng-click?
Версия драйвера должна быть синхронизирована с браузером, иначе работать не будет.
ohk, а браузер открывает сайт загружается значит драйвера совместимы?
Да, это важно. вот почему просят версию веб-драйвера
Сэр, версия 3.9.0, и я получаю эту ошибку при нажатии на элемент Element <a class = "external" href = ""> could not be scrolled into view , это из-за тега ng?
Сэр, я использую последнюю версию
Да, сэр, я обновился до 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")>
какая у вас версия драйвера gecko?
geckodriver-v0.20.1-win64
Вызывает ли он ту же ошибку для CSS-селектора и текста ссылки, упомянутого в моем ответе? Я заметил, что вы использовали внешний
Я использовал этот elm = driver.find_element_by_link_text('Check it out') driver.execute_script("arguments[0].click();", elm), он работал, но вместо того, чтобы попасть в Amazon, он перенаправляется на домашнюю страницу, не знаю, зачем вообще идея? На странице есть много кнопок «Проверить это», все нацелены на Amazon, ни одна из них не перенаправляет на домашнюю страницу!
'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, чтобы получить соответствующий дочерний элемент, и этот код будет работать.
Перед тем, как начать автоматизацию, прочтите вкратце о том, как вы можете создавать и использовать локаторы, прежде чем погрузиться в автоматизацию.
element_to_click.click() выдает эту ошибку - ElementNotInteractableException: Message: Element <a class = "external" href = ""> could not be scrolled into viewИзвините, сэр, он по-прежнему выдает ту же ошибку Element <a class = "external" href = ""> could not be scrolled into view
Сэр, любая идея, почему я не могу нажать кнопку?
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
см. Edit 3 в ответе
Отлично, это сработало, сэр, но вместо того, чтобы приземляться в Amazon, он перенаправляется на домашнюю страницу, на странице есть много кнопок проверки, все нацеленные на Amazon, но все же он перенаправляется на домашнюю страницу вот URL-адрес, пожалуйста, посмотрите thisiswhyimbroke.com/gifts/gifts-for-men
Пожалуйста, сначала разберитесь в структуре страницы, которую вы автоматизируете, а затем попытайтесь ее автоматизировать. Также этот комментарий выходит за рамки этого вопроса. Я могу дать вам код для перехода по ссылке, но чему вы в этом научитесь?
Смотрите мою последнюю редакцию - вы можете использовать это, чтобы нажать на любую кнопку подарочной статьи
Спасибо, сэр, я смотрю на это, кстати, вы можете сказать, что это означает? - аргументы [0]
Большое спасибо, сэр, я был подавлен из-за этого с прошлой недели. Не могли бы вы дать мне несколько ресурсов, где я могу узнать больше?
Какую языковую привязку вы используете - Python или Java?