Selenium无法定位xpath,但浏览器中存在xpath

mwkjh3gx  于 2022-12-13  发布在  其他
关注(0)|答案(4)|浏览(282)

我不知道这是不是最好的标题,我试图使用 selenium 自动化2fa的网站上,所以所有我需要做的是anwser的电话和脚本将照顾到其余的,但我试图让 selenium 点击按钮不断显示为无法定位,即使它总是在同一个地方,从来没有改变这里是我的代码Python

callMe = driver.find_element('xpath', '//*[@id="auth_methods"]/fieldset/div[2]/button')
callMe.click()
sleep(25)

这是三个按钮中的一个,除了xpath之外,所有按钮都具有相同的元素信息。这里是所有3个按钮元素,我试图获取第二个

<button tabindex="2" type="submit" class="positive auth-button"><!-- -->Send Me a Push </button>
<button tabindex="2" type="submit" class="positive auth-button"><!-- -->Call Me </button>
<button tabindex="2" type="submit" class="positive auth-button"><!-- -->Text Me </button>

我不知道除了使用xpath之外,我还可以如何找到第二个按钮,但这是不工作的,我不知道我是否可以或如何根据里面的文本搜索按钮。

yyhrrdl8

yyhrrdl81#

您是否尝试使用By

from selenium.webdriver.common.by import By

callMe = driver.find_element(By.XPATH, '//*[@id="auth_methods"]/fieldset/div[2]/button')
piv4azn7

piv4azn72#

尝试使用By.cssselector,获取所需按钮的主体html的css选择器。

callMe = driver.find_element(By.css_selector, 'selectorofbodyhtml')
callme.click()
yruzcnhs

yruzcnhs3#

尝试以下xpath

//button[starts-with(text(),'Call Me')]
yqlxgs2m

yqlxgs2m4#

所需的元素Call Me是一个动态元素,因此要单击它,您需要为element_to_be_clickable()引入WebDriverWait,您可以使用以下locator strategies之一:

  • 使用 XPATHcontains()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[contains(., 'Call Me')]"))).click()
  • 使用 XPATHstarts-with()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[starts-with(., 'Call Me')]"))).click()

*注意:必须添加以下导入:

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

相关问题