我正在使用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) 我试图用分裂填写登录表单上的字段.当我检查渲染页面时,我看到用户名输入框同时包含一个标记和名称"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填充这样的页面上的输入字段?
目前,我正在使用以下内容在网站上填写表格:
browser.fill(‘form[firstname]’, ‘Mabel’)
browser.fill(‘form[email]’, ‘hi@hi.com’)
browser.select(‘form[color]’, ‘yellow’)
Run Code Online (Sandbox Code Playgroud)
但表格依次填写表格,一个接一个.有没有办法一次填写表格?
谢谢你,一定会投票并接受答案!
目前正在与其他学生一起参加网络抓取课程,我们应该向虚拟网站提出"获取"请求,解析并访问其他网站.
问题是,虚拟站点的内容只会持续几分钟而消失,内容会以一定的间隔恢复.在内容可用的时间内,每个人都试图发出"获取"请求,因此我只是挂起,直到每个人都清除,内容最终消失.所以我最终无法成功发出'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)
所以我的问题是,在得到回复之前,最快/最好的方法是做出无休止的并发"获取"请求?
一旦我将以下项目添加到购物车: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程序,该程序正在打开网页列表,供用户从网站手动下载报告。我以前没有准备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) 我在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驱动程序吗?
使用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) 我的目标是登录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)