Centos7 服务器上phantomjs自启动问题

作者: 简书用户9527 | 来源:发表于2018-04-21 22:16 被阅读24次

    无界面浏览器

    phantomjs是selenium子包webdriver下面的一个浏览器,本身是一个浏览器(headless browser),更详细的使用教程可移步:[官方文档]http://selenium-python-zh.readthedocs.io/en/latest/index.html

    phantomjs 配置问题

    很多博客写phantomjs使用教程并不是写的很详细,或许我看得不够详细,直到在工作过程中遇到问题,才花时间详细了解一下。

    配置使用,建议记一下

    from selenium import webdriver
    # 引入配置对象DesiredCapabilities
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    dcap = dict(DesiredCapabilities.PHANTOMJS)
    #从USER_AGENTS列表中随机选一个浏览器头,伪装浏览器
    dcap["phantomjs.page.settings.userAgent"] = (random.choice(USER_AGENTS))
    # 不载入图片,爬页面速度会快很多
    dcap["phantomjs.page.settings.loadImages"] = False
    # 设置代理
    service_args = ['--proxy=127.0.0.1:9999','--proxy-type=socks5']
    #打开带配置信息的phantomJS浏览器
    driver = webdriver.PhantomJS(phantomjs_driver_path, desired_capabilities=dcap,service_args=service_args)                
    # 隐式等待5秒,可以自己调节
    driver.implicitly_wait(5)
    # 设置10秒页面超时返回,类似于requests.get()的timeout选项,driver.get()没有timeout选项
    # 以前遇到过driver.get(url)一直不返回,但也不报错的问题,这时程序会卡住,设置超时选项能解决这个问题。
    driver.set_page_load_timeout(10)
    # 设置10秒脚本超时时间
    driver.set_script_timeout(10)
    
    

    需要记住的点:
    (一):浏览器头设置
    dcap["phantomjs.page.settings.userAgent"] = (random.choice(USER_AGENTS))
    (二):图片是否载入问题
    dcap["phantomjs.page.settings.loadImages"] = False
    (三):代理设置
    service_args = ['--proxy=127.0.0.1:9999','--proxy-type=socks5']
    (四):页面连接超时时间设置
    driver.set_script_timeout(10)

    phantomjs进程自启动问题

    因为在服务器上开启了定时任务,当把定时任务关掉后,还是会发现phantomjs会占用内存,百度(用不了梯子)了好些个方法,找到了解决的办法,这里稍微记录一下。

    phantomjs 对多进程的支持性极不稳定,会出现一些莫名的问题,但是phantomjs 相对于Google浏览器占用内存少,轻量级,无界面,是一大可取之处。

    (1) 代码问题:

    问题代码

    因为这一串代码,很粗心的没有用 try catch 方法包起来,只是简单的退出来,集成在scrapy 这个框架里,难免不出现问题。

    正确代码姿势:

                driver = webdriver.PhantomJS()
                try:
                    driver.get(request.url)
                    print('current_url1 >>>>', driver.current_url)
                    time.sleep(1)
                    content = driver.page_source.encode('utf-8')
                    driver.quit()
                except Exception as e:
                    driver.quit()
    

    加上了try catch

    总结:

    生活中加上 try catch 语句总免会减少些奇葩的bug 发生,难道不是吗?heh.......

    相关文章

      网友评论

      本文标题:Centos7 服务器上phantomjs自启动问题

      本文链接:https://www.haomeiwen.com/subject/usmflftx.html