If / else语句取决于硒中是否存在xpath

时间:2019-01-26 19:11:37

标签: python selenium selenium-webdriver

我不清楚如何在if / else语句中检查特定xpath的存在(我也不确定使用xpaths是否是最佳方法)。

我本质上想做以下事情(列出链接到可能不存在或不完整的搜索结果的URL):

对于每个网址:

  1. 检查是否存在适当的搜索结果页面
  2. 如果存在,请检查“更多信息”按钮是否存在
  3. 如果存在,请检查每个数据字段是否存在/已填充
  4. 对于所有空白字段/部分/页面,在字典中填入空白

我尝试通过定义一个函数来检查xpath的存在并在嵌套的if / else语句中使用它来尝试执行此操作,但是这些返回了错误。

当前代码如下:

检查xpath是否存在的函数(布尔值):

def hasxpath(xpath):
    try: 
        driver.find_element_by_xpath(xpath)
        return True
    except:
        return False

用于处理网址列表的代码:

for url in urls:
    driver = webdriver.Chrome(executable_path='/xxx')
    driver.get(url)

    # Check if search result page exists
    if hasxpath('xxx') == True:

        # If 'More Info' button exists, click it
        if hasxpath('xxx') == True:
            driver.find_element_by_xpath('xxx').click()

            # For each field, check if it exists and if so collect data
            # (example below for 'Name' field)
            if hasxpath('xxx') == True:
                name = driver.find_element_by_xpath('xxx')
                name = name.text
            else:
                name = ''
            driver.close()

        else:
            driver.close()

    else:
        driver.close()

当页面不存在时,这似乎仍然不起作用(它抛出错误而不是执行driver.close()。是否有简单的解决方法?或者也许是检查此信息的更好方法和定位数据(而不是使用xpath)?

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错。我检查了是否存在Xpath,并关闭了浏览器。请运行我的代码,并对url和xpath进行必要的更改。

const fileData = {
    dirName: 'app',
    files: ['index.html'],
    subDirs: [
      {
        dirName: 'js',
        files: [
          'main.js',
          'app.js',
          'misc.js',
        ],
        subDirs: [
          {
            dirName: 'vendor',
            files: [
              'jquery.js',
              'underscore.js',
            ],
            subDirs: [],
          },
        ],
      },
      {
        dirName: 'css',
        files: [
          'reset.css',
          'main.css',
        ],
        subDirs: [],
      },
    ],
  };