我无法在 selenium python 中使用 id 单击文本字段

I am unable to click on a text field using id in selenium python

Here is the image of text field I want to click

这是检查字段:

<input _ngcontent-oqh-c45="" formcontrolname="target" matinput="" placeholder="https://" class="mat-input-element mat-form-field-autofill-control ng-tns-c40-0 ng-untouched ng-pristine cdk-text-field-autofill-monitored ng-invalid" id="mat-input-0" data-placeholder="https://" aria-invalid="false" aria-required="false"> 

这是我正在使用的代码片段:

enter_url = driver.find_element(By.ID, 'mat-input-0')
enter_url.click()

这是我遇到的错误:

Message: no such element: Unable to locate element: {"method":"css selector","selector":"[id="mat-input-0"]"}
  (Session info: chrome=98.0.4758.102)

这可能是因为三个原因

  1. 这是mat-input-0,尤其是0部分是动态生成的
  2. 元素未正确呈现。
  3. 此字段在 iframe 或 shadow-root 中。

检查以下 XPath:

//input[@formcontrolname = 'target' and @placeholder='https://' and starts-with(@id,'mat-input') and @aria-invalid='false']

是否唯一。

检查步骤:

Press F12 in Chrome -> 转到 element 部分 -> 执行 CTRL + F -> 然后粘贴 xpath 并查看是否需要 element正在 突出显示 1/1 匹配节点。

  1. 如果它是唯一的,那么我们可以使用显式等待:

代码:

enter_url = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@formcontrolname = 'target' and @placeholder='https://' and starts-with(@id,'mat-input') and @aria-invalid='false']")))
enter_url.click()

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
  1. 如果 XPath 不是唯一的,那么我们将需要更多 HTML 来定位具有唯一性的正确元素。