我正在尝试使用chrome中的python和硒执行网络自动化。 问题是我试图找到一个没有id或类名的按钮。
xpath是:
//*[@id="Form1"]/table[1]/tbody/tr/td/div/div[2]/table/tbody/tr[3]/td/span[1]
并且html代码为:
<span class="SectionMethod" onclick="window.location.href="explorer/explorer.aspx?root=user";" style="cursor:pointer;text-decoration:underline;color:CadetBlue;">Open</span>
这是一个称为“打开”的按钮,但是还有其他具有相同文本和类的按钮,因此我无法按文本定位。
这是我的代码:
from selenium import webdriver
driver = webdriver.Chrome(chrome_options=chromeOptions, desired_capabilities=chromeOptions.to_capabilities())
driver.get("..............")
driver.find_element_by_xpath('//*[@id="Form1"]/table[1]/tbody/tr/td/div/div[2]/table/tbody/tr[3]/td/span[1]')
这是我遇到的错误:
NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"Form1"}
(Session info: chrome=75.0.3770.100)
(Driver info: chromedriver=74.0.3729.6 (255758eccf3d244491b8a1317aa76e1ce10d57e9-refs/branch-heads/3729@{#29}),platform=Windows NT 10.0.16299 x86_64)
答案 0 :(得分:1)
您可能在元素加载之前正在寻找它。按照the example from the documentation
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
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "myDynamicElement"))
)
finally:
driver.quit()
在您的情况下:
EC.presence_of_element_located((By.ID, "myDynamicElement"))
将会
EC.presence_of_element_located((By.XPATH, '//*[@id="Form1"]/table[1]/tbody/tr/td/div/div[2]/table/tbody/tr[3]/td/span[1]'))
如果不能解决该错误,建议您查看how to form a MCVE和how to ask a well received question(建议在创建新帐户时阅读)。然后将您的问题编辑为更简洁的格式,以便我们更有效地为您提供帮助!欢迎使用StackOverflow。
答案 1 :(得分:0)
答案 2 :(得分:0)
大概您正在尝试将click()
元素上的<span>
文本为 Open ,并且要实现这一点,您必须为 WebDriverWait element_to_be_clickable()
,您可以使用以下任一解决方案:
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span.SectionMethod[onclick*='explorer/explorer']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//span[@class='SectionMethod' and contains(@onclick,'explorer/explorer')][text()='Open']"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
此外,在使用chrome=75.0.3770.100
时,您需要将 ChromeDriver 更新为ChromeDriver 75.0.3770.90 (2019-06-13)