Python Selenium:找不到元素/没有输入

Python Selenium:找不到元素/没有输入,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我有一个间歇性的问题。在这个特定的网站上,我已经注意到了40-50%的时间。我不知道为什么会发生这种情况。它未链接到任何特定浏览器。firefox和chrome都会出现这种情况 这以前没有发生过 browser.get("https://www.voilanorbert.com") inputName = wait.until(EC.presence_of_element_located((By.ID, "form-search-name"))) inputName.click() inputN

我有一个间歇性的问题。在这个特定的网站上,我已经注意到了40-50%的时间。我不知道为什么会发生这种情况。它未链接到任何特定浏览器。firefox和chrome都会出现这种情况

这以前没有发生过

browser.get("https://www.voilanorbert.com")
inputName = wait.until(EC.presence_of_element_located((By.ID, "form-search-name")))
inputName.click()
inputName.send_keys(sheet.cell_value(i,0))
inputDomain  = wait.until(EC.presence_of_element_located((By.ID, "form-search-domain")))
inputDomain.click()
inputDomain.send_keys(sheet.cell_value(i,2))
norbertsearch = browser.find_element_by_name("search")
norbertsearch.click()
上面的代码用于将excel工作表中的名称和此excel工作表中的域名输入到相应的框中。然而,无论出于何种原因,在选择域框时,这个过程有时会被挂起

下面是它的外观图片:

通常在中间的“@”标志周围没有红色框。将值输入到该框时,该过程会受阻…并且会超时


所以挂断,我的意思是它实际上找不到“domain”元素。因此,它不会在域框中输入任何内容,阻碍了整个自动化过程,并引发此异常:
raise TimeoutException(message,screen,stacktrace)selenium.common.exceptions.TimeoutException:message:

我发现解决此问题的唯一好方法是执行javascript来设置值

        WebElement element = idriver.findElement(By.id(("form-search-domain")));

    ((JavascriptExecutor)idriver).executeScript("arguments[0].value = 'sample';", element);
抱歉,代码示例是用Java编写的。但您所要做的就是执行javaScript
document.findElementbyId(“ID”).value=“your value”

认为您的excel拥有如下所示的数据:

test1”用于-名字和姓氏文本框

示例”“用于-Domain.com文本框

因此,在代码中,您应该从

inputDomain.send_keys(sheet.cell_value(i,2))

因为您是从第0行和第1列而不是第2列提取数据(示例)

请详细阅读以下代码以供参考:

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

browser = webdriver.Firefox()
book = xlrd.open_workbook("path_to_excelfile\\sample.xlsx")
sheet = book.sheet_by_name("Sheet1")
i=0
browser.get("https://www.voilanorbert.com")
inputName = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "form-search-name")))
inputName.click()
inputName.send_keys(sheet.cell_value(i, 0))
inputDomain = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "form-search-domain")))
inputDomain.click()
inputDomain.send_keys(sheet.cell_value(i, 1))
norbertsearch = browser.find_element_by_name("search")
norbertsearch.click()

单击“不放置输入”后,请验证要放置输入的元素是否存在(使用您的等待时间),然后在进入域之前单击inputName?这似乎是错的?@Dude我在发布代码时犯了一个错误…我单击了inputDomain而不是inputNamehmm在java中有一个预期条件,因此元素是可单击的,您尝试过了吗?不,它与excel工作表无关,所以您错了。我的数据实际上在第1列和第3列(也就是第0列和第2列)。这不是问题所在。请仔细阅读我的问题…我有点困惑。我的值是一个名为domain的局部变量。所以我大概会做以下操作:element=browser.find_element_by_id(“form search domain”)browser.execute_script()…但是我会在()之间放什么呢?不管怎样,我知道怎么做了。但使用javascript实际上并没有解决这个问题。我仍然得到相同的精确结果。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import xlrd

browser = webdriver.Firefox()
book = xlrd.open_workbook("path_to_excelfile\\sample.xlsx")
sheet = book.sheet_by_name("Sheet1")
i=0
browser.get("https://www.voilanorbert.com")
inputName = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "form-search-name")))
inputName.click()
inputName.send_keys(sheet.cell_value(i, 0))
inputDomain = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "form-search-domain")))
inputDomain.click()
inputDomain.send_keys(sheet.cell_value(i, 1))
norbertsearch = browser.find_element_by_name("search")
norbertsearch.click()