我想找到一个输入元素,然后单击它。但是有一个错误。我搜索了很多答案,但对我来说不起作用。我认为thenre在页面(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()
答案 0 :(得分:1)
在尝试查找元素以确保能够找到它们并处于适当状态时,您将需要使用等待和期望条件。
替换
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")))
最好使用类似的方法,通过在脚本其他区域中使用等待和期望条件来查找元素并与元素进行交互。这些将使您的脚本更加健壮,并且能够处理时序问题而不会崩溃得更好。
答案 1 :(得分:0)
尝试执行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']")))