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

标签 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 页,并在每次找到特定地址时单击。

如果有人可以帮助我,那就太好了!我很确定这是微不足道的,但是尽管网上有所有可用的文档,但在过去的几天里我一直无法解决这个问题......

最佳答案

这是我编写的 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

你不能点击一个不可见的元素,首先你需要暴露它,然后只能点击。

希望对你有帮助

关于python - Selenium Python - 测试页面中是否存在元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24950736/

相关文章:

python - 在 XML 中查找元素同级的最 Pythonic 方法

Python 2.7 方法解析顺序覆盖

python - 如何使用 pycparser 删除 AST 节点?

java - Selenium 网格,线程 "main"java.lang.NoSuchMethodError 中出现异常

java - 奇怪的错误 : Error:(20, 55) java: void 不能用 selenium 取消引用

python、lxml和xpath——html表格解析

python - 使用 Python (pywin32) 或 VBA 更改 Excel 中的 Microsoft Query

python - 猴子补丁在尝试使用对象的特定属性时引发 AttributeError

c# - 为自动化任务运行多个 chrome(配置文件)实例

html - 用于匹配具有缺失/未指定属性的元素的 XPath?