Selenium Python - 测试页面中元素是否存在

1 投票
1 回答
14538 浏览
提问于 2025-04-18 14:43

我刚接触Selenium,想写一个Python脚本,在谷歌上搜索一些关键词,找到关键词后自动打开相关页面。

我一直在尝试使用这个网站上的脚本:

from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import NoSuchElementException

if __name__ == "__main__":
    driver = webdriver.Firefox()
    wait = WebDriverWait(driver, 100)
    driver.get("http://google.com")

    inputElement = driver.find_element_by_name("q")
    inputElement.send_keys("Irwin Kwan")

    wait.until(EC.element_to_be_clickable((By.XPATH,"//a[@href='http://irwinhkwan.wordpress.com/']")))
    blog = driver.find_element_by_xpath("//a[@href='http://irwinhkwan.wordpress.com/']")
    blog.click()

    driver.quit()

如果页面上显示了xpath,这个脚本运行得很好。但是如果没有显示,我们就会一直等下去。

我该如何检查一个元素是否存在,如果存在就点击它呢?

我试过使用文档中提到的'try',或者NoSuchElementException,但我承认对“双重否定”有点困惑;-)

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()

最终,我想要一个循环,能够访问谷歌结果的第X页,每次找到特定地址时就点击一下。

如果有人能帮我一下,那就太好了!我觉得这应该很简单,但尽管网上有很多文档,我这几天还是没能搞定……

1 个回答

1

这是我写的一个小工具,用来处理网页元素,希望对你有帮助。

class Element(object):

    def __init__(self, xpath=None):
        self.xpath = xpath

    def __get_element(self):
        return Driver().find_element_by_xpath(self.xpath)


    def is_exist(self):
        try:
           return self.__get_element().is_displayed()
        except NoSuchElementException, e:
            logger.exception(e.message)
            return False

你不能点击一个看不见的元素,首先你得让它显示出来,然后才能点击。

希望这对你有帮助。

撰写回答