标签: splinter

Django LiveServerTestCase与phantomjs间歇性挂起/超时

我正在使用Django(1.5.5),selenium(2.41.0),splinter(0.6.0)和phantomjs(1.9.7)来运行实时测试.

虽然测试大多数工作,不时(通常在CircleCI上,在本地VM中较少),但它们会挂起,直到CircleCI上出现超时或手动杀死转子(Ctrl-C即KeyboardInterrupt工作).

这是我的基础测试类的外观:

class SplinterTestCase(LiveServerTestCase):
    @classmethod
    def setUpClass(cls):
        super(SplinterTestCase, cls).setUpClass()
        # start phantom just once per class, to speed up tests
        cls.phantom = splinter.Browser('phantomjs', load_images=False)

    @classmethod
    def tearDownClass(cls):
        cls.phantom.quit()
        super(SplinterTestCase, cls).tearDownClass()

    def login(self, *args, **kwargs):
        # perform a login using Django builtin "client", steal the session
        # cookie and inject it to phantomjs, avoiding the need to do the
        # login dance for each test
        from django.conf import settings
        cn = settings.SESSION_COOKIE_NAME

        self.django_client.login(*args, **kwargs)
        if cn in self.django_client.cookies:
            self.client.driver.add_cookie({
                'name': …
Run Code Online (Sandbox Code Playgroud)

python django selenium phantomjs splinter

6
推荐指数
1
解决办法
890
查看次数

用splinter填充输入字段

我试图用分裂填写登录表单上的字段.当我检查渲染页面时,我看到用户名输入框同时包含一个标记和名称"u".如何从分裂中填写此字段?我尝试了以下方法:

from splinter import Browser

url = "http://www.weiyun.com/disk/login.html"
browser = Browser('firefox')
browser.visit(url)
browser.fill("u", "foo@bar.com")
print "done"
Run Code Online (Sandbox Code Playgroud)

但根据返回的错误,没有这样的字段:

ElementDoesNotExist: no elements could be found with name "u"
Run Code Online (Sandbox Code Playgroud)

如何使用splinter填充这样的页面上的输入字段?

html python forms testing splinter

6
推荐指数
1
解决办法
3076
查看次数

Python:如何使用splinter/Browser一次填写表单?

目前,我正在使用以下内容在网站上填写表格:

browser.fill(‘form[firstname]’, ‘Mabel’)
browser.fill(‘form[email]’, ‘hi@hi.com’)
browser.select(‘form[color]’, ‘yellow’)
Run Code Online (Sandbox Code Playgroud)

但表格依次填写表格,一个接一个.有没有办法一次填写表格?

谢谢你,一定会投票并接受答案!

python browser python-2.7 splinter

6
推荐指数
1
解决办法
558
查看次数

Python + requests + splinter:制作多个并发'get'请求的最快/最好方法是什么?

目前正在与其他学生一起参加网络抓取课程,我们应该向虚拟网站提出"获取"请求,解析并访问其他网站.

问题是,虚拟站点的内容只会持续几分钟而消失,内容会以一定的间隔恢复.在内容可用的时间内,每个人都试图发出"获取"请求,因此我只是挂起,直到每个人都清除,内容最终消失.所以我最终无法成功发出'get'请求:

import requests
from splinter import Browser    

browser = Browser('chrome')

# Hangs here
requests.get('http://dummysite.ca').text
# Even if get is successful hangs here as well
browser.visit(parsed_url)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,在得到回复之前,最快/最好的方法是做出无休止的并发"获取"请求?

python browser python-2.7 python-requests splinter

6
推荐指数
1
解决办法
1644
查看次数

Python:如何使用Browser splinter选中复选框?

一旦我将以下项目添加到购物车:http://www.supremenewyork.com/shop/accessories/wau85w4km/cxv3ybp1w并转到结帐页面:https://www.supremenewyork.com/checkout,有一个条款和条件复选框,我试图检查,Browser’s splinter但我不能这样做:

例如,尝试了以下但是都遇到了错误:

from splinter import Browser

browser = Browser("chrome")
browser.find_by_id('order_terms').click()         
#Error: selenium.common.exceptions.WebDriverException: Message: unknown error

browser.check('order[terms]').click()
#Error: selenium.common.exceptions.ElementNotVisibleException: Message: element not visible

browser.find_by_name('order[terms]').click()
#Error: selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
Run Code Online (Sandbox Code Playgroud)

我能做错什么?我怎样才能选中复选框Browser splinter

提前谢谢你,一定会upvote /接受答复

python web-scraping python-2.7 splinter

6
推荐指数
1
解决办法
741
查看次数

在Splinter中获取href值?

我想href<a>Splinter的元素中获取价值.

那有什么api方法吗?

python href splinter

5
推荐指数
1
解决办法
3745
查看次数

致命的Python错误:Py_Initialize:无法加载文件系统编解码器。ImportError:没有名为“编码”的模块

我正在尝试制作简单的python程序,该程序正在打开网页列表,供用户从网站手动下载报告。我以前没有准备exe文件的经验。.我只是在学习python编码的过程。所有这些都是在Windows 7 x64上完成的

这是我的python代码:

#!C:/Python34/python.exe -u

from splinter import *
import time
import os
import csv

#----------------------------------
raporty = []
with open('../raporty.csv', newline='') as csvfile:
    contents = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in contents:
        r = ', '.join(row)
        r = r.replace(',','')
        raporty.append(r)

#--not implemented yet
zmienne = []
with open('../zmienne.csv', newline='') as csvfile:
    contents = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in contents:
        r = ', '.join(row)
        r = r.replace(',','')
        zmienne.append(r)

print("start")
browser = Browser()

#----------------LOGIN------------------
browser.visit('https://xxxx')
print(browser.title)
if …
Run Code Online (Sandbox Code Playgroud)

python encoding exe splinter

5
推荐指数
2
解决办法
2万
查看次数

splinter:如何添加chrome选项?

我在linux下使用splinter(v0.7.3)进行Web测试,而在chrome上,默认的示例代码无法运行:

from splinter import Browser
from pyvirtualdisplay import Display

d = Display(visible=0, size=(800, 600))
d.start()

b = Browser('chrome')
b.visit('http://www.google.com')
b.quit()

d.stop()
Run Code Online (Sandbox Code Playgroud)

在运行时,我得到了这样的异常:

selenium.common.exceptions.WebDriverException: Message: chrome not reachable
Run Code Online (Sandbox Code Playgroud)

我在selenium中测试了相同的功能,添加了一些chrome选项:

from selenium import web driver
from selenium.webdriver.chrome.options import Options
from pyvirtualdisplay import Display

d = Display(visible=0, size=(800, 600))
d.start()

opt = Options()
opt.add_argument('--disable-setuid-sandbox')
b = webdriver.Chrome(chrome_options=opt)
b.get('http://www.google.com')
b.quit()

d.stop()
Run Code Online (Sandbox Code Playgroud)

这项工作正常,区别在于--disable-setuid-sandbox添加到chrome驱动程序的选项,如果选项未添加,则会有一个僵尸chrome-sandbox进程chromium-browser.

这里的问题是,我不知道如何传递一个chrome.options.Option实例splinter.Browser(),我浏览下的实现splinter/driver/webdriver/chrome.py,似乎没有条目传递这样的实例splinter.Browser().还有其他方法可以将选项传递给chrome驱动程序吗?

selenium selenium-chromedriver splinter

5
推荐指数
1
解决办法
4254
查看次数

Python +碎片+ http:错误-httplib.ResponseNotReady

使用splinter和Python,我有两个正在运行的线程,每个线程都访问相同的主URL但使用不同的路由,例如,线程一hits:mainurl.com/threadone和线程两次hits mainurl.com/threadtwo使用:

from splinter import Browser
browser = Browser('chrome')
Run Code Online (Sandbox Code Playgroud)

但是遇到了以下错误:

Traceback (most recent call last):
  File "multi_thread_practice.py", line 299, in <module>
    main()
  File "multi_thread_practice.py", line 290, in main
    first_method(r)
  File "multi_thread_practice.py", line 195, in parser
    second_method(title, name)
  File "multi_thread_practice.py", line 208, in confirm_product
    third_method(current_url)
  File "multi_thread_practice.py", line 214, in buy_product
    browser.visit(url)
  File "/Users/joshua/anaconda/lib/python2.7/site-packages/splinter/driver/webdriver/__init__.py", line 184, in visit
    self.driver.get(url)
  File "/Users/joshua/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 261, in get
    self.execute(Command.GET, {'url': url})
  File "/Users/joshua/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 247, in execute
    response = self.command_executor.execute(driver_command, params) …
Run Code Online (Sandbox Code Playgroud)

python multithreading http anaconda splinter

5
推荐指数
1
解决办法
505
查看次数

无法使用Selenium / Splinter保存和重新加载Gmail Cookies

我的目标是登录Gmail,序列化cookie,退出浏览器,然后打开新的浏览器,加载保存的cookie并检查我的电子邮件,而无需输入我的登录详细信息。非常简单明了,我几乎可以在所有尝试过的网站上做到这一点。但是,Gmail迫使我每次都重新登录。

这是我的代码:

from splinter import Browser
import selenium
import pickle

def export_cookies(browser, the_name):
    yummy = browser.cookies.all(verbose=True)
    location = 'cookies/' + the_name
    pickle_save(yummy, location)
    print(the_name, "saved", len(yummy))


def pickle_save(obj, location):
    file_name = location
    file_object = open(file_name, 'wb')
    pickle.dump(obj, file_object)
    file_object.close()


def pickle_load_account(cookie_file_name):
    try:
        return pickle.load(open(cookie_file_name, "rb"))
    except FileNotFoundError:
        return 0


def browser_add_cookies(browser, cookies):
    if len(cookies) > 0:
        for cookie in cookies:
            browser.cookies.add({cookie['name']: cookie['value']})
        print("-----", len(cookies), " cookies added, reloading")
        browser.visit('https://mail.google.com/mail/u/0/#inbox')
    else:
        print("No cookies to load. Error.")


browser = Browser('firefox')
browser.visit('https://mail.google.com/mail/u/0/#inbox')
cookie_file …
Run Code Online (Sandbox Code Playgroud)

gmail selenium python-3.x splinter

5
推荐指数
1
解决办法
122
查看次数