python селен не активен в точке - PullRequest
0 голосов
/ 22 апреля 2020

Я хочу найти входной элемент и затем щелкнуть по нему. Но есть ошибка. Я искал много ответов, но это не работает для меня. Я думаю, что на странице нет специальной функции (http://plantpan.itps.ncku.edu.tw/promoter.php). selenium.common.exceptions.WebDriverException: Message: unknown error: Element <input name="submit" type="SUBMIT" value="Search"> is not clickable at point (84, 595). Other element would receive the click: <html lang="en">...</html>

код ниже


#!/usr/bin/env python
# -*- coding: utf-8 -*-

from selenium import webdriver
from time import sleep
from bs4 import BeautifulSoup
import re


driver = webdriver.Chrome()
driver.get("http://plantpan.itps.ncku.edu.tw/promoter.php")
#clear input
driver.find_element_by_name('sequence').clear()
# input 
driver.find_element_by_name('sequence').send_keys('>11111\nTTTGGTTGGGTTTGGGTTTGGGTGTGTTGTGT')
sleep(5)
#choose all species
driver.find_element_by_css_selector("input[type='radio'][value='allspecies']").click()
#driver.find_element_by_xpath("//*[@id='promoter']/font[2]/input[2]").click()
#submit
submit = driver.find_element_by_css_selector("input[type='SUBMIT'][value='Search']")
submit.click()
driver.implicitly_wait(2)
# get 
result = driver.page_source
soup = BeautifulSoup(result, 'html.parser')

button = driver.find_element_by_link_text("<img src='./img/search/download_analysis_result.png'/>")
button.click()
driver.implicitly_wait(3)



#获取当前的URL的地址
#关闭浏览器
sleep(2)
driver.close()

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

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

Заменить

submit = driver.find_element_by_css_selector("input[type='SUBMIT'][value='Search']")

на

submit = wait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='SUBMIT'][value='Search']")))

Вам необходимо добавить следующее:

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

В вашем коде возникла проблема с поиском последнего элемента, поэтому вам также необходимо внести это изменение:

Заменить:

button = driver.find_element_by_link_text("<img src='./img/search/download_analysis_result.png'/>")

на

button = wait(driver, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "img")))

Было бы неплохо использовать аналогичный подход для поиска и взаимодействия с элементами с использованием ожиданий и ожидаемых условий в других областях. вашего сценария. Это позволит вашему скрипту быть более устойчивым и способным обрабатывать проблемы с синхронизацией без лучшего сбоя.

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

Попробуйте выполнить js клик по элементу

element = driver.find_element_by_css_selector("input[type='SUBMIT'][value='Search']")
driver.execute_script("arguments[0].click();", element)

Если есть задержка на сайте, просто добавьте ожидание и после этого выполните клик.

from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='SUBMIT'][value='Search']")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...