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

时间:2014-07-25 07:57:00

标签: python selenium xpath

我是Selenium的新手,我想编写一个Python脚本,在google上搜索一些关键字,并在找到关键字时自动打开一个页面。

我一直在尝试使用此website

中的脚本
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()

最终,我想要一个while循环,转到google结果的页码X,并在每次找到特定地址时点击。

如果有人可以帮我一臂之力!我很确定它是微不足道的,但尽管在线提供了所有文档,但我在过去几天都无法解决这个问题......

1 个答案:

答案 0 :(得分:1)

这里是我编写的WebElement的一个小包装器,希望它有所帮助

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

您无法单击不可见的元素,首先需要公开它,然后只需单击。

希望有所帮助