使用Selenium / Python处理“无标题”页面

时间:2019-02-05 16:49:13

标签: python selenium selenium-chromedriver

尝试访问某些URL时遇到问题,它们随机不加载,并且页面标题在浏览器中显示为“ No Title”,并且在print()上不显示任何内容并正确加载它们需要刷新。

我正在尝试以某种方式检测这些页面,以便可以刷新和访问它们,这是到目前为止我尝试过的一些示例:

def no_title():
    sleep(3)
    if not driver.title:
        print('Sem Titulo')
        driver.refresh()
        sleep(2)
    else:
        pass

def no_title():
    sleep(3)
    if driver.execute_script("return document.documentElement.outerHTML") == '<html><head></head><body></body></html>':
        print('Sem Titulo')
        driver.refresh()
        sleep(2)
    else:
        pass

def no_title():
    sleep(3)
    if driver.title == 'Sem título':
        print('Sem Titulo')
        driver.refresh()
        sleep(2)
    else:
        pass

由于我几乎处于死胡同,我希望有人能提供帮助!预先感谢。

编辑:这是浏览器/测试页上显示的图片:https://i.imgur.com/s9zMtRK.png

2 个答案:

答案 0 :(得分:0)

首先获取页面标题,然后将其存储在如下所示的变量中:

someTitle = str(driver.title)

然后strip()它,strip()将删除前导,尾随空格并检查是否有空引号或无,如下所示:

if someTitle.strip()=='' or someTitle.strip()==None:

您下面更新的方法将标识“无标题”页面:

def no_title():
    sleep(3)
    someTitle = str(driver.title)
    if someTitle.strip()=='' or someTitle.strip()==None:
        print('Sem Titulo')
        driver.refresh()
        sleep(2)
    else:
        pass

如果您的页面没有刷新,则可以尝试以下代码,该代码将首先获取当前网址,然后它将尝试再次启动它:

def no_title():
    sleep(3)
    someTitle = str(driver.title)
    if someTitle.strip()=='' or someTitle.strip()==None:
        print('Sem Titulo')
        currentURL = driver.current_url
        print(currentURL)
        driver.get(currentURL)
        sleep(2)
    else:
        pass

如果您打开了多个窗口/选项卡,则需要切换到特定的选项卡以使用Windows手柄刷新它,请尝试以下代码:

def no_title():
    sleep(3)
    someTitle = str(driver.title)
    if someTitle.strip()=='' or someTitle.strip()==None:
        print('Sem Titulo')
        current = driver.current_window_handle
        handles = driver.window_handles
        for handle in handles:
            if handle != current:
                driver.switch_to_window(handle)
                driver.refresh()
        driver.switch_to_window(current)
        sleep(2)
    else:
        pass

或者您可以尝试以下方法:

def no_title():
    sleep(3)
    print('Sem Titulo')
    current = driver.current_window_handle
    handles = driver.window_handles
    for handle in handles:
        driver.switch_to_window(handle)
        someTitle = str(driver.title)
        if someTitle.strip()=='' or someTitle.strip()==None:
            driver.refresh()
    driver.switch_to_window(current)
    sleep(2)
else:
    pass

答案 1 :(得分:0)

经过一连串的试验最终解决了这个问题,实际上,由于我使用了许多版本的chrome和驱动程序进行了测试,因此使用的浏览器实际上是一个问题。

可用的浏览器是Opera / operadriver,以下是在Opera中发生无标题时实际起作用的功能:

def no_title():
    sleep(2)
    doc_request = driver.execute_script("return document.documentElement.outerHTML")
    if doc_request == '<html><head></head><body></body></html>':
        driver.refresh()
        sleep(2)
    else:
        pass