可以选择“我很幸运”,但不能单击它

时间:2019-05-28 17:01:16

标签: python selenium

我正在尝试编写一个简单的程序来打开chrome,转到Google,然后单击“我很幸运”。我看到它的作用就像是将光标放在图标上,但不会执行单击。

driver.get("https://www.google.com")
element = WebDriverWait(driver, 20) \
    .until(EC.visibility_of_element_located((By.ID, "gbqfbb")))
element.click()

代码中没有错误,但不会单击该元素。

3 个答案:

答案 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();