Python 硒元素元';点击

Python 硒元素元';点击,python,firefox,selenium-webdriver,Python,Firefox,Selenium Webdriver,我遇到了一个问题,.click()对元素不起作用。用鼠标单击后,会弹出一个小窗口,其中包含可供选择的值。然而,我不能让selenium单击该元素,因为它会给我错误,即使找到了该元素。使用Selenium IDE并记录我的操作,它会在同一个元素上记录单击操作,因此我不明白什么不起作用。到目前为止,我浏览并点击了很多元素 以下是引发错误的代码段: from selenium import webdriver from selenium.webdriver.common.by import By fr

我遇到了一个问题,
.click()
对元素不起作用。用鼠标单击后,会弹出一个小窗口,其中包含可供选择的值。然而,我不能让selenium单击该元素,因为它会给我错误,即使找到了该元素。使用Selenium IDE并记录我的操作,它会在同一个元素上记录单击操作,因此我不明白什么不起作用。到目前为止,我浏览并点击了很多元素

以下是引发错误的代码段:

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 
from selenium.webdriver.support.ui import Select
import time

def FirefoxTest():
    fp = webdriver.FirefoxProfile('C:/Users/MYUSER/AppData/Roaming/Mozilla/Firefox/Profiles/ethy92lt.default')
    driver = webdriver.Firefox(fp)
    site = ("www.company_intranet.com")
    driver.get(site)
    try:
        WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "C29_W35_V37_V46_btresporg_struct.partner_no-btn")))
    except:
        print("C29_W35_V37_V46_btresporg_struct.partner_no-btn not found")
    driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click()
我尝试单击的元素id:

<a class="th-ip-h" id="C29_W35_V37_V46_btresporg_struct.partner_no-btn" href="javascript:void(0)" onclick="thtmlb_hideContextMenu(event); thtmlbCSVHManger.inputfieldF4IconClick('C29_W35_V37_V46_btresporg_struct.partner_no','C29_W35_V37_V46','ZSRQM_PROB_H','PROBLEMHEADEREF');htmlbSubmitLib('htmlb',this,'thtmlb:inputField:inputField:null','myFormId','C29_W35_V37_V46_btresporg_struct.partner_no','\x23AUTONAV\x23OP_FINDRESPORG\x23BTRESPORG\x230\x23PARTNER_NO',0);return false;" onfocus="thtmlbSaveKeyboardFocus('C29_W35_V37_V46_btresporg_struct.partner_no');thtmlb_hideContextMenu();" title="Open Input Help"><img class="th-ip-img" src="/SAP/BC/BSP/SAP/ZIR_STYLES/EHP3 default/images/helpF4.gif" alt="Open Input Help"></a>

我得到的错误是:

Traceback (most recent call last):
  File "C:/Users/MYUSER/PycharmProjects/untitled/selen_QT.py", line 229, in <module>
    FirefoxTest()
  File "C:/Users/MYUSER/PycharmProjects/untitled/selen_QT.py", line 98, in FirefoxTest
    driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click()
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 75, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webelement.py", line 454, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 201, in execute
    self.error_handler.check_response(response)
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 102, in check_response
    value = json.loads(value_json)
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
回溯(最近一次呼叫最后一次):
文件“C:/Users/MYUSER/PycharmProjects/untitled/selen_QT.py”,第229行,在
FirefoxTest()
文件“C:/Users/MYUSER/PycharmProjects/untitled/selen_QT.py”,第98行,在FirefoxTest中
driver.find_element_by_id(“C29_W35_V37_V46_btresporg_struct.partner_no-btn”)。单击()
文件“C:\Users\MYUSER\AppData\Local\Programs\Python\35-32\lib\site packages\selenium\webdriver\remote\webelement.py”,第75行,单击
self.\u执行(命令。单击\u元素)
文件“C:\Users\MYUSER\AppData\Local\Programs\Python\35-32\lib\site packages\selenium\webdriver\remote\webelement.py”,第454行,在执行
返回self.\u parent.execute(命令,参数)
文件“C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\site packages\selenium\webdriver\remote\webdriver.py”,执行中的第201行
self.error\u handler.check\u响应(响应)
文件“C:\Users\MYUSER\AppData\Local\Programs\Python\35-32\lib\site packages\selenium\webdriver\remote\errorhandler.py”,第102行,在check\u响应中
value=json.load(value\u json)
文件“C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\\ u_init\u_.py”,第319行,在loads中
返回\u默认\u解码器。解码
文件“C:\Users\MYUSER\AppData\Local\Programs\Python\Python35-32\lib\json\decoder.py”,第339行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“C:\Users\MYUSER\AppData\Local\Programs\Python 35-32\lib\json\decoder.py”,第357行,原始解码
从None引发JSONDecodeError(“预期值”,s,err.value)
json.decoder.JSONDecodeError:预期值:第1行第1列(字符0)
编辑:以前的睡眠计时器解决了该问题

time.sleep(5)

驱动程序。按id(“C29\U W35\U V37\U V46\U btresporg\u struct.partner\u no-btn”)查找元素。单击()
您有问题
尝试
除了
块外,您等待元素,但即使它超时,您仍会尝试查找它。其内容应如下:

try:
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "C29_W35_V37_V46_btresporg_struct.partner_no-btn")))
    driver.find_element_by_id("C29_W35_V37_V46_btresporg_struct.partner_no-btn").click()
except TimeoutException:
    print("C29_W35_V37_V46_btresporg_struct.partner_no-btn not found")

尽管我不认为这是问题的根源。

只是澄清一下:要单击其中一个的元素在另一个窗口中?它在同一个窗口(源代码)中。我无法弹出另一个窗口继续。您是否尝试检查Firefox调试器以查看其中是否有错误?谢谢您的建议。我将调整我的试块。正如您所提到的,问题不在于我找不到元素(我找到了,并且可以打印他的ID),而在于我在尝试单击它时出错。问题似乎出在库中。我看了一下硒的已知缺陷,发现了一个类似的缺陷,但我不能100%确定这是同一个缺陷。驱动程序似乎试图从FirefoxAPI中解包JSON消息,但未能解包,因为它实际上是空的。恐怕这不是你能控制的。我在点击前设置了5秒钟的计时器,这样弹出窗口就出现了。我想,尽管找到了元素,但网站还是需要一些时间来完全加载。我需要做更多的测试。