这是我设置它的代码:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.resourceTimeout"] = ("5000")
driver = webdriver.PhantomJS(desired_capabilities=dcap)

但是在我的超长脚本中,当我的互联网很慢并且页面加载时间超过5秒时,它似乎没有超时。

关于PhantomJS超时的文档很少,对Python来说更少,所以我想也许这甚至不是这样做的。

有没有人用Python在PhantomJS中成功设置超时?

谢谢!

===============>>#1 票数:5 已采纳

而不是针对phantomjs资源超时,您可以设置驱动程序的超时,如下面的Firefox驱动程序示例:

browser = webdriver.Firefox()
browser.set_page_load_timeout(30)

你可以改变30到任何数字

谢谢

===============>>#2 票数:0

您可以使用默认的Python sleep方法重试几次。

import time
time.sleep()

===============>>#3 票数:0

FIREFOX = 'firefox'
PHANTOM = 'phantom'
NO_IMAGES = False
NEED_IMAGES = True
opened_pages_counter = 0
driver = None
details = {}
user_agent_mozilla = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'
print("[x] UNIVERSAL_DRIVER module loaded")

if platform.system() == 'Windows':
    PHANTOMJS_PATH = 'd:/bin/phantomjs/bin/phantomjs.exe'
else:
    PHANTOMJS_PATH = './phantomjs'


@atexit.register
def cleanup():
    print("universal_driver:: on_exit")
    closeDriver()

#    PHANTOMJS_PATH = 'd:/bin/phantomjs/bin/phantomjs.exe'
#    driver_test = buildDriver(FIREFOX, NO_IMAGES )
# timeout need to be in seconds
#    driver_test = buildDriver(FIREFOX, NEED_IMAGES, timeout=100, width=100, height=50)

def buildDriver(driverType, needImages, **kwargs):
    global driver, details
    closeDriver()
    timeout = 60
    width=800
    height = 600
    x=0
    y=0
    for key in kwargs:
        print("another keyword arg: %s: %s" % (key, kwargs[key]))
        if key=="timeout":       timeout =  int(float(kwargs[key]))
        if key == "width": width = int(float(kwargs[key]))
        if key == "height": height = int(float(kwargs[key]))
        if key == "x": x = int(float(kwargs[key]))
        if key == "y": y = int(float(kwargs[key]))


    details['driverType'] = driverType
    details['needImages'] = needImages
    if driverType == FIREFOX:
        if driver == None:
            firefox_profile = webdriver.FirefoxProfile()
            if needImages == False:
                firefox_profile.set_preference('permissions.default.image', 2)
                firefox_profile.set_preference('dom.ipc.plugins.enabled.libflashplayer.so', 'false')

            firefox_profile.set_preference("http.response.timeout", timeout)
            firefox_profile.set_preference("dom.max_script_run_time", timeout)
            driver = webdriver.Firefox(firefox_profile=firefox_profile)
            driver.set_window_size(width, height)
            return driver

    if driverType == PHANTOM:
        if driver == None:
            dcap = dict(DesiredCapabilities.PHANTOMJS)
            dcap["phantomjs.page.settings.userAgent"] = user_agent_mozilla
            dcap["phantomjs.page.settings.resourceTimeout"] = timeout*1000 # in mls
            # dcap["phantomjs.page.settings.loadImages"] = needImages
            # driver = webdriver.PhantomJS(desired_capabilities=dcap)
            service_argsA = []
            if needImages == False:
                service_argsA = ['--load-images=no']
            driver = webdriver.PhantomJS(PHANTOMJS_PATH, desired_capabilities=dcap, service_args=service_argsA)
            driver.set_window_size(width, height)
            return driver


def openPage(url):  # need to prevent of opening pages twice
    global driver
    global opened_pages_counter
    if driver == None:
        driver = buildDriver(PHANTOM, NO_IMAGES)
    if driver.current_url != url:
        driver.get(url)
        opened_pages_counter = opened_pages_counter + 1
        uprint("universal_driver::", details['driverType'], ", needImages:", details['needImages'], " ; page opened:", url)


def closeDriver():
    global driver
    if driver == None:
        return
    driver.close()
    driver.quit()
    driver = None
    uprint("universal_driver:: driver closed")


def uprint(*objects, sep=' ', end='\n', file=sys.stdout):
    enc = file.encoding
    if enc == 'UTF-8':
        print(*objects, sep=sep, end=end, file=file)
    else:
        f = lambda obj: str(obj).encode(enc, errors='backslashreplace').decode(enc)
        print(*map(f, objects), sep=sep, end=end, file=file)

  ask by User translate from so

未解决问题?本站智能推荐:

2回复

在selenium webdriver.PhantomJS上设置超时

情况 我有一个简单的python脚本来获取给定URL的HTML源: 有时,该网址指向具有缓慢加载的外部资源的页面(例如视频文件或非常慢的广告内容)。 在完成.get(url)请求之前,Webdriver将一直等到加载这些资源。 注意:由于无关紧要的原因,我需要使用Pha
1回复

python中的webdriver.PhantomJS超时?

我只是使用selenium-python。 当我使用webdriver.Firefox() ,可以获得结果。 当我使用webdriver.PhantomJS() ,无法返回结果(脚本正在挂起)。 谁能帮我?
1回复

带有phantomjs的Django LiveServerTestCase间歇性挂起/超时

我正在使用Django(1.5.5),硒(2.41.0),碎片(0.6.0)和phantomjs(1.9.7)进行实时测试。 尽管测试大部分都能正常进行,但有时(在CircleCI上经常出现,而在本地VM中很少出现)它们会挂起,直到CircleCI超时或我手动杀死运行程序为止(Ctrl-C
1回复

运行python脚本Phantomjs和Selenium时出现超时问题

我正在用Phontomjs和Selenium运行python脚本。 我面临超时问题。 20-50分钟后停止。 我需要一个解决方案,以便我可以运行我的脚本而不会出现此超时问题。 问题在哪里,我该如何解决? 码:
2回复

在Python中使用PhantomJS设置代理

因此,我已经使用以下代码成功设置了代理,一切正常。 我想自动将代理作为字符串导入并将该字符串添加到下面的service_args中,但是我不确定如何执行此操作。 当前工作代码: 现在,我希望能够将“ proxy”变量传递到它说“ --proxy = 11.22.33.44:555
1回复

Selenium Desired Capabilities - 为PhantomJS驱动程序设置handleAlerts

我正在尝试使用webdriver的phantomJS,我在处理javascript警报时遇到了麻烦。 我注意到phantomjs驱动程序desired_capabilities有一个字段'handlesAlerts': False有没有办法将这个值设置为true? 我尝试过显而易见的方法,但
1回复

Python Selenium Phantomjs,在运行时设置代理

我知道我可以使用service_args在初始化时为phantomjs设置代理设置,但每次只是为了更改代理设置而重新启动phantomjs似乎很浪费。 在javascript中,运行时更改代理将使用setProxy函数完成。 如何使用selenium在Python中完成这项工作?
2回复

如何使用selenium和python在phantomjs中设置cookie?

它引发了一条错误消息“只能为当前域设置Cookie”,但我所做的只是将旧的cookie放入。有时我添加'正确'域,它会引发错误消息“无法设置Cookie”。 我在Firefox中测试过,Firefox也无法工作。
1回复

使用python,selenium和phantomJS设置代理

我已经尝试过由Alex在下一页上发布的解决方案,但我一直收到此错误。 如何在python webdriver中为phantomjs / ghostdriver设置代理? 我的PATH中有phantomJS。 这是我当前的测试脚本 谁能帮助我了解为什么我收到此错误? 当我
1回复

如何使用python在PhantomJS中设置屏幕分辨率

如何在PhantomJS中设置屏幕分辨率? 我需要更改屏幕分辨率而不是窗口大小。 窗口大小!=屏幕分辨率。