pythonseleniumif
Ⅰ python selenium 获取短信验证码是字符和数字怎么读取数字
读取短信需要在相应的手机上读取呀
由于工作需要,登录网站需要用到验证码。最初是研究过验证码识别的,但是总是不能获取到我需要的那个验证码。直到这周五,才想起这事来,昨天顺利的解决了。
下面正题:
Python版本:3.4.3
所需要的代码库:PIL,selenium,tesseract
先上代码:
#coding:utf-8
import subprocess
from PIL import Image
from PIL import ImageOps
from selenium import webdriver
import time,os,sys
def cleanImage(imagePath):
image = Image.open(imagePath) #打开图片
image = image.point(lambda x: 0 if x<143 else 255) #处理图片上的每个像素点,使图片上每个点“非黑即白”
borderImage = ImageOps.expand(image,border=20,fill='white')
borderImage.save(imagePath)
def getAuthCode(driver, url="http://localhost/"):
captchaUrl = url + "common/random"
driver.get(captchaUrl)
time.sleep(0.5)
driver.save_screenshot("captcha.jpg") #截屏,并保存图片
#urlretrieve(captchaUrl, "captcha.jpg")
time.sleep(0.5)
cleanImage("captcha.jpg")
p = subprocess.Popen(["tesseract", "captcha.jpg", "captcha"], stdout=\
subprocess.PIPE,stderr=subprocess.PIPE)
p.wait()
f = open("captcha.txt", "r")
#Clean any whitespace characters
captchaResponse = f.read().replace(" ", "").replace("\n", "")
print("Captcha solution attempt: " + captchaResponse)
if len(captchaResponse) == 4:
return captchaResponse
else:
return False
def withoutCookieLogin(url=""):
driver = webdriver.Chrome()
driver.maximize_window()
driver.get(url)
while True:
authCode = getAuthCode(driver, url)
if authCode:
driver.back()
driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").clear()
driver.find_element_by_xpath("//input[@id='orgCode' and @name='orgCode']").send_keys("orgCode")
driver.find_element_by_xpath("//input[@id='account' and @name='username']").clear()
driver.find_element_by_xpath("//input[@id='account' and @name='username']").send_keys("username")
driver.find_element_by_xpath("//input[@type='password' and @name='password']").clear()
driver.find_element_by_xpath("//input[@type='password' and @name='password']").send_keys("password")
driver.find_element_by_xpath("//input[@type='text' and @name='authCode']").send_keys(authCode)
driver.find_element_by_xpath("//button[@type='submit']").click()
try:
time.sleep(3)
driver.find_element_by_xpath("//*[@id='side-menu']/li[2]/ul/li/a").click()
return driver
except:
print("authCode Error:", authCode)
driver.refresh()
return driver
driver = withoutCookieLogin("http://localhost/")
driver.get("http://localhost/enterprise/add/")
怎么获取我们需要的验证码
在这获取验证码的道路上,我掉了太多的坑,看过太多的文章,很多都是教你验证码的识别方法,但是没有说明,怎么获取你当前需要的验证码图片。
我的处理方法是:
1.先用selenium打开你需要的登录的页面地址url1
2.通过审核元素获取验证码的地址url2(其实最简单的是右键打开新页面)
3:在url1页面,输入地址url2进入url2页面,然后截屏保存验证码页面
4:处理验证码得到验证码字符串。然后点击浏览器后退按钮,返回url1登录页面
5:输入登录需要的信息和验证码
6:点击登录
7:验证登录后的页面,判断是否成功,若不成功则需要重新1-7的操作。
为了保护公司的信息,这个页面是我本地搭的服务,我在伯乐在线注册页面进行测试过这个验证码获得方法,可以通过。(这个验证码的处理方法,仅限验证码背景是像素点,若验证码有横线需额外处理。)
第一篇博文,不喜勿喷。
验证码处理方法参考文献:
Web Scraping with python.pdf
Ⅱ python+selenium 在执行测试脚本时,遇到错误如何能继续执行下去而不停止
(1)遇到错误继续执行需要做好异常处理就好了
(2)定位元素有时成功有时失败,可能由于网络不稳定,元素没有加载出来,脚本就去找这个元素,那肯定会失败的,你可以试下用显示等待,等页面全部加载出来后,再进行定位元素操作
Ⅲ python selenium怎么定位图中这种下拉框的选项
这种非select需要定位结合循环才行
li_list = driver.find_elements_by_xpath('//div[@class="ant-time-picker-panel-select"]/ul/li')
for li in li_list:
if "04" in li.text:
li.click()
break
Ⅳ 怎样开始写第一个基于python的selenium脚本
1、下载并安装python
2、安装selenium下载并解压缩selenium-2.32.0.tar.gz. 把selenium-2.32.0\py\下的selenium整个文件夹放入Python33\Lib\site-packages目录下。
3 下载Eclipse后安装pydev插件
4 打开eclipse创建pydev project,并添加一个Pydev Mole 输入一下代码
# coding=gbk
from selenium import webdriver
from selenium.webdriver.common import by
if __name__ == '__main__':
firefoxDriver=webdriver.Firefox()
firefoxDriver.get("http://www..com")
ele=firefoxDriver.find_element(by.By.ID,"kw")
ele.send_keys("hello")
5要想支持IE,下载IEDriverServer,解压缩之后,将exe程序放在安装python的根目录下。
6、运行过程中如果出现WebDriverException: Message: u'Unexpected error launching
Internet Explorer. Protected Mode settings are not the same for all
zones. Enable Protected Mode must be set to the same value (enabled or
disabled) for all zones.'
这个错误,更改IE的internet选项->安全,将Internet/本地Internet/受信任的站定/受限制的站点中的启用保护模式全部
去掉勾,或者全部勾上。下面是一个IE的例子,打开网络,自动搜索selenium。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Ie()
driver.get("xxx")
elem = driver.find_element_by_name("wd")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)
完成上述步骤,你已经写了第一个基于python的selenium 脚本了
Ⅳ selenium python怎么封装方法
一、常用函数的封装
在使用selenium做web自动化测试的过程中,经常会碰到各种各样的问题,比如:
1、页面加载比较慢时,selenium查找元素抛出异常,导致脚本运行中止
2、写完脚本后发现代码逻辑不够清晰,维护困难,降低测试效率
所以很有必要对selenium进行封装使框架更适合公司的需求,下面是基类的封装,主要使用单例模式,可以将业务逻辑代码存放在不同的Python文件中
注:BASE_URL为博客园的登录地址
四、其他
按照此模式博友可根据公司具体的业务来实现自动化测试脚本,本文抛砖引玉,如有其他更好的想法可以一起探讨