Элемент не кликабелен - хотя он и есть - PullRequest
3 голосов
/ 04 марта 2020

Надеюсь, вы можете помочь. Я относительно новичок в Python и Selenium. Я пытаюсь собрать простой скрипт, который автоматизирует поиск новостей на разных сайтах. Основное внимание было уделено футболу и 1025 *, чтобы я мог получить последние новости «Манчестер Юнайтед» из нескольких мест и сохранить для меня список названий ссылок и URL. Затем я мог бы сам просмотреть ссылки и выбрать все, что хотел просмотреть.

При попытке найти независимую газету (https://www.independent.co.uk/) я, похоже, столкнулся с проблемой элемента не взаимодействует при использовании следующих подходов:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys 
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome('chromedriver')
driver.get('https://www.independent.co.uk')

time.sleep(3)

#accept the cookies/privacy bit
OK = driver.find_element_by_id('qcCmpButtons')
OK.click()

#wait a few seconds, just in case
time.sleep(5)


search_toggle = driver.find_element_by_class_name('icon-search.dropdown-toggle')
search_toggle.click()

Это выдает selenium.common.exceptions.ElementNotInteractableException: Сообщение: элемент не взаимодействует ошибка

Я также пробовал с XPATH

search_toggle = driver.find_element_by_xpath('//*[@id="quick-search-toggle"]')

и я тоже пробовал ID.

Я много читал здесь, а затем также пытался использовать методы WebDriverWait и execute_script:

element = WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH, '//*[@id="quick-search-toggle"]')))
driver.execute_script("arguments[0].click();", element)

Это не похоже на ошибку, но окно поиска не появилось, т.е. щелчка не произошло.

Любая помощь, которую вы могли бы оказать, была бы фантастична c. Спасибо, Пит

Ответы [ 3 ]

1 голос
/ 04 марта 2020

Сначала необходимо открыть окно поиска, затем отправить ключи поиска:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import os

chrome_options = Options()
chrome_options.add_argument("--start-maximized")
browser = webdriver.Chrome(executable_path=os.path.abspath(os.getcwd()) + "/chromedriver", options=chrome_options)
link = 'https://www.independent.co.uk'
browser.get(link)

# accept privacy
button = browser.find_element_by_xpath('//*[@id="qcCmpButtons"]/button').click()

# open search box
li = browser.find_element_by_xpath('//*[@id="masthead"]/div[3]/nav[2]/ul/li[1]')
search_tab = li.find_element_by_tag_name('a').click()

# send keys to search box
search = browser.find_element_by_xpath('//*[@id="gsc-i-id1"]')
search.send_keys("python")
search.send_keys(Keys.RETURN)
1 голос
/ 04 марта 2020

Ваш локатор //*[@id="quick-search-toggle"], на странице 2. Первый невидим, а второй видим. По умолчанию селен относится к первому элементу, к сожалению, вы имеете в виду второй элемент, поэтому вам нужен еще один уникальный локатор. Попробуйте это:

search_toggle = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="row secondary"]//a[@id="quick-search-toggle"]')))
search_toggle.click()
0 голосов
/ 04 марта 2020

Можете ли вы попробовать следующие шаги

search_toggle = driver.find_element_by_xpath('//*[@class="row secondary"]/nav[2]/ul/li[1]/a')

search_toggle.click()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...