Ошибка «Элемент <> не может быть прокручен в поле зрения» не отвечает на обычные решения - PullRequest
0 голосов
/ 12 апреля 2020

Я использую селен для разработки скребка для массовой загрузки эпизодов подкастов из Spreaker.

# https://www.spreaker.com/show/alabamas-morning-news-with-jt


for i in range(3):
    print("Click number: {}".format(str(i)))
    see_more = browser.find_element_by_id("show episodes more")
    see_more.click()
    browserPage = bs4(browser.page_source, 'lxml')
    allEps.append( allEpisodesOnPage(browserPage) ) 

Поскольку они не все на пронумерованных страницах (/ episodes / page1, / page2), я должен нажать кнопку, чтобы загрузить больше.

Но по какой-то причине мой Код не может найти кнопку:

Traceback (most recent call last):
  File "KeepTalking__02.py", line 59, in <module>
    see_more.click()
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/usr/local/lib/python3.6/dist-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: Element <a id="show_episodes_more" class="btnn btnn_alternative btnn_small" href="#"> could not be scrolled into view

Теперь «невозможно просмотреть» - это стандартная ошибка в Selenium, и я был завален возможными решениями:

  1. Прокрутите элемент в поле зрения.
  2. Подождите, пока элемент станет видимым:

    element = WebDriverWait(browser, 10).until(
        ex_co.presence_of_element_located((By.CSS_SELECTOR, "#show_episodes_more")))
    
  3. Переключитесь на включенный фрейм.

Но по какой-то причине я все еще получаю точно такую ​​же ошибку. Что может вызвать это? Я сделал скриншот, и кнопка была на странице, поэтому я не понимаю, откуда исходит ошибка.

1 Ответ

0 голосов
/ 12 апреля 2020

В основном ElementNotInteractableException возникает при временном наложении другого WebElement на WebElement. Чтобы избежать ElementNotInteractableException, вы можете использовать ActionChains, пожалуйста, обратитесь к решению ниже:

element = WebDriverWait(browser, 10).until(
        ex_co.presence_of_element_located((By.CSS_SELECTOR, "#show_episodes_more")))

ActionChains(driver).move_to_element(element).click().perform()

Примечание: , пожалуйста, добавьте ниже импорта в ваше решение

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

или

element= wait(self.browser,30).until(EC.element_to_be_clickable((By.XPATH,"//a[@id='show_episodes_more']")))
driver.execute_script("arguments[0].click();", element)
...