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為博客園的登錄地址
四、其他
按照此模式博友可根據公司具體的業務來實現自動化測試腳本,本文拋磚引玉,如有其他更好的想法可以一起探討