click () не работает на трудном для навигации веб-сайте - PullRequest
1 голос
/ 04 ноября 2019

Я довольно плохо знаком с Python и очень плохо знаком с Selenium. Я хочу нажать кнопку на веб-сайте, который не имеет атрибутов class или id.

Я пытался использовать XPath с find_element_by_xpath() и click(), но либо, похоже, ничего не делает или просто генерируетошибка.

from selenium import webdriver
from config import my_user, my_password


browser = webdriver.Safari()
browser.set_window_size(1600, 1200)
browser.set_window_position(0, 0)
browser.get('http://thefutoncritic.com/myfuton/listings/')

email_box = browser.find_element_by_name('email')
email_box.send_keys(my_user)
password_box = browser.find_element_by_name('password')
password_box.send_keys(my_password)
password_box.submit()

listings_button = browser.find_element_by_xpath(
    '//html/body/div/table/tbody/tr[1]/td[1]/table[4]/tbody/tr/td[6]/div/a')
listings_button.click()

Выдержка с сайта:

<tbody><tr height="37">
...
<td width="150">
<div style="width:150; height=37; background-image:url('/images/my-listings.jpg'); background-position:0 -37px;">
<a href="/myfuton/listings/"><img src="/images/spacer.gif" width="150" height="37" border="0">
</a>
</div>
</td>
</tr>   
</tbody>
Traceback (most recent call last):
  File "/Users/tspgallagher/Projects/Python/Sandbox/temp2.py", line 17, in <module>
    listings_button.click()
  File "/Users/tspgallagher/Library/Python/3.7/lib/python/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/Users/tspgallagher/Library/Python/3.7/lib/python/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "/Users/tspgallagher/Library/Python/3.7/lib/python/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Users/tspgallagher/Library/Python/3.7/lib/python/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: 

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Это может работать:

browser.find_element_by_xpath("//a[contains(@href, '/myfuton/listings/')]")

РЕДАКТИРОВАТЬ

Использование ожидания для элемента, доступного для нажатия из ожидаемых условий, может сработать или, по крайней мере, дать вам представление о том, гдепроблема может быть в следующем:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, '/myfuton/listings/')]")))

element.click();

Предполагается, что для того, чтобы элемент стал кликабельным, требуется некоторое время. Это может быть не так. Возможно, элемент скрыт всплывающим окном или чем-то в этом роде. В этом случае вы можете смоделировать щелчок по элементу непосредственно ДО этой ссылки, а затем смоделировать нажатие клавиши TAB, а затем ВВОД.

0 голосов
/ 04 ноября 2019

Пожалуйста, проверьте ниже решение с waitt и относительным xpath

driver.get("http://thefutoncritic.com/myfuton/listings/")


element=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//table[4]//tbody[1]//tr[1]//td[6]//div[1]//a[1]//img[1]")))
element.click()
element0=WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//td[contains(text(),'Welcome to MYFUTON, our new - and completely free')]")))

print(element0.text)
#     print(elements)
# driver.find_element_by_xpath("//div[@class='bubble-element GroupItem group-item entry-1']//button[@class='fa fa-spotify inner-element bubble-element clickable-element']").click()
print driver.current_url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...