我正在尝试编写一个简单的程序来打开chrome,转到Google,然后单击“我很幸运”。我看到它的作用就像是将光标放在图标上,但不会执行单击。
driver.get("https://www.google.com")
element = WebDriverWait(driver, 20) \
.until(EC.visibility_of_element_located((By.ID, "gbqfbb")))
element.click()
代码中没有错误,但不会单击该元素。
答案 0 :(得分:0)
您在哪里获得该ID?当我访问该站点时,没有看到具有该ID的元素。 Google可能会采用某种方式来操纵它,从而使人们更难以自动化该过程。 Google可能不希望您这样做。
无论哪种方式,您都应该可以通过其他方式选择元素:
driver.get("https://www.google.com")
element = WebDriverWait(driver, 20) \
.until(EC.visibility_of_element_located((By. CSS_SELECTOR, '[jsaction="sf.lck"]')))
element.click()
答案 1 :(得分:0)
我也找不到该ID。
这是使用 css_selector
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from appium.webdriver.common.mobileby import, By
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.google.com")
element = WebDriverWait(driver, 20) \
.until(EC.visibility_of_any_elements_located((By. CSS_SELECTOR, '[name="btnI"][type="submit"]')))[0]
element.click()
我建议在visibility_of_any_elements_located
上使用visibility_of_element_located
。原因是选择器找到两个元素。一种可见,一种不可见。
在使用visibility_of_element_located
时,它将使用find_element并将获得不可见的元素。
使用visibility_of_any_elements_located
时,它将使用find_elements并将同时获得两个元素。它会遍历所有元素,并且如果可见一个或多个元素,则会立即将其返回。
答案 2 :(得分:0)
driver.findElement(By.xpath("//div[@class='FPdoLc lJ9FBc']//following::input[@class='RNmpXc']")).click();