pythonselenium多线程
‘壹’ 用python selenium提取网页中的所有<a>标签中的超级链接地址
提取所有链接应该用循环:
urls=driver.find_elements_by_xpath("//a")
forurlinurls:
print(url.get_attribute("href"))
如果get_attribute方法报错应该是没有找到a标签对象,如果确定是有的话,可能是页面加载比较慢还没加载出来,selenium默认是不会等待对象出现的,需要在找对象前加一些等待时间;另外如果页面上有iframe的话需要先切换进去才能找到里面的对象。
‘贰’ python+selenium 多线程调用的方法中 为什么不能新打开浏览器窗口
map是系统关键字,不能把它做list用。
map2=3
for k in range(0,map2):
t =threading.Thread(target=te_check())
t.setDaemon(True)
t.start()
这个可以用
‘叁’ python+selenium 在执行测试脚本时,遇到错误如何能继续执行下去而不停止
(1)遇到错误继续执行需要做好异常处理就好了
(2)定位元素有时成功有时失败,可能由于网络不稳定,元素没有加载出来,脚本就去找这个元素,那肯定会失败的,你可以试下用显示等待,等页面全部加载出来后,再进行定位元素操作
‘肆’ python+selenium中,如何定位相同的多个ID
默认如果有多个匹配内容的话,selenium匹配到第一个内容;
你应该匹配到的内容应该不是第一个
‘伍’ Python+selenium如何定位多层嵌套元素
有时候,什么定位元素的方法都试过了,还是定位不到元素,就考虑frame切换问题 driver.switchTo().frame("定位到的frame元素"); //接下来就可以在这个frame框架内定位该框架里的元素了 driver.findElement(By.name("message")).sendKeys("top"); //如果定位另一框架内元素,需返回到web页面,再进行切换 driver.switchTo().defaultContent(); driver.switchTo().frame("要定位的frame元素");
‘陆’ selenium+python有什么方法可以运行的时候提高下速度吗
第一个是 Socket,它提供了标准的 BSD Sockets API。
第二个是 SocketServer, 它提供了服务器中心类,可以简化网络服务器的开发。
‘柒’ 关于虫师的pdf中python+selenium的多进程执行测试用例失败的问题
#之前用过如下代码爬过豆瓣用户,效率还可以
#好像叫gevent协称模块来着,你可以试试。
#!/usr/bin/envpython
#coding:utf-8
fromseleniumimportwebdriver
fromselenium.webdriver.phantomjs.
fromgeventimportmonkey
monkey.patch_all()
importgevent
importsys
importtime
defdoJob(urls,name):
service_args=[
]
browser=webdriver.PhantomJS(executable_path=r'D:TestProjectphantomjsinphantomjs.exe',service_args=service_args)
wr=open('done/'+name+'.txt','w')
forurlinurls:
browser.get(url)
time.sleep(1)
soup=BeautifulSoup(browser.page_source.encode('utf-8'))
findNames=soup.findAll('div',attrs={'class':'name'})
iffindNamesisNone:
printurl
forsubinfindNames:
n=sub.a.string.encode('utf8')ifsub.a.stringisnotNoneelse''
pl=sub.span.string.encode('utf8')ifsub.span.stringisnotNoneelse''
wr.write(n+','+pl)
wr.write(' ')
wr.close()
browser.quit()
files={'culture':[],'travel':[],'ent':[],'fashion':[],'life':[],'tech':[]}
forkey_fninfiles:
withopen(key_fn+'.link','r')asf:
files[key_fn]=f.read().split(' ')
gevent.joinall([
gevent.spawn(doJob,files['culture'],'culture'),
gevent.spawn(doJob,files['travel'],'travel'),
gevent.spawn(doJob,files['ent'],'ent'),
gevent.spawn(doJob,files['fashion'],'fashion'),
gevent.spawn(doJob,files['life'],'life'),
gevent.spawn(doJob,files['tech'],'tech'),
])
‘捌’ selenium可以多线程跑吗
最近刚刚接触到RobotFramework,发现这个工具倒是可以满足我的要求,而且可以结合seleniumLibrary,用来做web的自动化测试相当不错。之前我也接触过selenium,不过感觉那个工具更贴近开发人员使用,有了robotFramework之后,感觉这个工具相当强大,而且是贴近测试人员的。之所以说强大,主要是这些测试脚本都可以用文本格式保存(如txt/html等)==安装篇==如果有想学的朋友可以自己下载以下文件安装(Google-code里可以找到大部分的安装文件):这篇文章的内容比较旧了,最新的安装指南请查看更新篇python-2.7.1.msi(首先要有python,请选择将Python加入Path)wxPython2.8-win32-unicode-2.8.11.0-py27.exe(wxPython,必须要的)robotframework-2.6.0.win32.exe(然后装robot的Framework)robotframework-ride-0.38.1.win32.exe(robotFramework的IDE,很不错)robotframework-seleniumlibrary-2.8.win32.exe(seleniumLibrary)安装成功后执行[PythonDir]\Scripts\ride.py看到界面就是安装成功了。如果需要AutoIt支持就下载下面2个东东。AutoItLibrary-1.1pywin32-216.win32-py2.7.exe==入门篇==安装完成了,这个框架可以说是基于keyword的操作,按F5可以看到所有加载的keyword。首先新增一个project然后新增suite然后新增testcase,接着在suite层级addlibrary,把seleniumlibrary加进来,添加后按F5检验是否添加成功,如图OK,继续在suite的setting里设置suite启动和结束的keyword,即StartSeleniumServer和StopSeleniumServer,他会在运行时帮助我们自动启动seleniumserver。接下来在testcase里添加一个步骤,openbrowser(一般用selenium做web测试都要用这个方法来打开浏览器),添加后关键字变成蓝色表示找到关键字了,否则可能是拼写错误或者没有加载相应的library。红色表示有一个必选参数要给定输入值,具体参数可以看F5里的keyword说明。输入参数,第二个参数默认是firefox,不过我没装,就用ie吧。以上只是一个简单的例子,没有详细说明每个步骤的操作,只是初步介绍。后续再详细介绍
‘玖’ selenium python 怎么进行三个界面切换
#coding=UTF-8
''''''
#coding=UTF-8
fromseleniumimportwebdriver
importtime
driver=webdriver.Firefox()
driver.implicitly_wait(10)
driver.get("")
sreach_windows=driver.current_window_handle
driver.find_element_by_link_text(u'登录').click()
driver.find_element_by_link_text(u"立即注册").click()
#获得当前所有打开的窗口的句柄
all_handles=driver.window_handles
#进入注册窗口
forhandleinall_handles:
ifhandle!=sreach_windows:
driver.switch_to_window(handle)
print('nowregisterwindow!')
driver.find_element_by_name("phone").send_keys('15143049892')
driver.find_element_by_name("password").send_keys('password')
#回到搜索窗口
forhandleinall_handles:
ifhandle==sreach_windows:
driver.switch_to_window(handle)
print('nosreachwindow!')
driver.find_element_by_id('TANGRAM__PSP_2__closeBtn').click()
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(2)
driver.quit()
‘拾’ python selenium 需要判断一个网页如果10秒内未加载完成,就停止加载,然后自动刷新怎么做
browser=webdriver.Chrome()#打开浏览器
browser.set_page_load_timeout(10)#10秒
whileTrue:
try:
browser.get('你的网址')
break
except:
pass