日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

用python-webdriver實(shí)現(xiàn)自動(dòng)填表的示例代碼

瀏覽:149日期:2022-06-30 08:32:54

 在日常工作中常常需要重復(fù)填寫某些表單,如果人工完成,費(fèi)時(shí)費(fèi)力,而且網(wǎng)絡(luò)延遲令人十分崩潰。如果能夠用程序?qū)崿F(xiàn)自動(dòng)填表,效率可以提高一倍以上,并且能夠移植到多臺(tái)計(jì)算機(jī),進(jìn)一步提高工作效率。webdriver是python的selenium庫中的一個(gè)自動(dòng)化測(cè)試工具,它能完全模擬瀏覽器的操作,無需處理復(fù)雜的request、post,對(duì)爬蟲初學(xué)者十分友好。

一、環(huán)境配置

python3.6+selenium庫+xlrd庫+xlwt庫

其中xlrd和xlwt庫用于讀寫excel表中的數(shù)據(jù)。

還要下載一個(gè)瀏覽器的driver文件用于打開瀏覽器,注意要選擇與計(jì)算機(jī)系統(tǒng)相符合的版本(max/windows64位/windows32位)

ChromeDriver:http://npm.taobao.org/mirrors/chromedriver/

  IEDriver:http://selenium-release.storage.googleapis.com/index.html

將下載下來的driver.exe放到瀏覽器根目錄和python的根目錄

二、打開網(wǎng)頁

以IE瀏覽器為例,以下兩行代碼就可以實(shí)現(xiàn)打開一個(gè)IE瀏覽器并且訪問我們需要填表的網(wǎng)站

driver= webdriver.Ie()driver.get(’http://xxxx.com/’)

如果網(wǎng)站需要登陸(需要填表的一般是公司內(nèi)部網(wǎng)站),再寫一個(gè)login函數(shù),將driver作為參數(shù)調(diào)用

driver = login(driver)

注意一定要將driver傳回,這樣driver才能繼續(xù)接受程序的指令

三、元素定位

webdriver的工作原理是找到網(wǎng)頁中某一個(gè)元素,可以對(duì)其進(jìn)行填入數(shù)據(jù)或點(diǎn)擊等操作。

關(guān)于元素定位可以參考這篇博客

我主要用到的元素定位方式有

driver.find_element_by_id(’someid’)#通過元素的id定位driver.find_element_by_css_selector('input[value=’確定’')#查找一個(gè)input元素,它的value屬性值為’確定’driver.find_element_by_xpath('//span[contains(@style,’COLOR: red’)]/span[1]')#查找一個(gè)style屬性值為’COLOR:red’的span元素的第一個(gè)span子元素 (1)通過id定位

如果我們想在網(wǎng)頁表單的某一個(gè)位置填某項(xiàng)值或者點(diǎn)擊某個(gè)按鈕,我們首先要用開發(fā)者工具查看這個(gè)元素的源代碼,然后首先觀察它有沒有id,如果有id,直接用id定位該元素。然后,用

driver.find_element_by_id(’someid’).click()#點(diǎn)擊元素driver.find_element_by_id(’someid’).send_keys(’somekeys’)#填入’somekeys’driver.find_element_by_id(’someid’).clear()#清空輸入框中已有的值

實(shí)現(xiàn)我們想要做的操作。

(2)通過ccs selector定位

如果我們想要操作的元素沒有ID,那么我們就要找到它跟網(wǎng)頁其他元素不同的特征,ccs selector是一種十分靈活的定位方式,其中用value定位是一個(gè)不錯(cuò)的選擇。以

driver.find_element_by_css_selector('input[value=’確定’')

為例,雙引號(hào)中的input可以換成任何網(wǎng)頁元素(div、span、input、a等),中括號(hào)中是該元素的某一個(gè)屬性(style、id、value、class等),等號(hào)后面是該屬性的值。

注意,如果網(wǎng)頁中有多個(gè)元素同時(shí)滿足ccs selector的條件,如有多個(gè)value=“確定” 的input,那么find_element_by_css_selector只會(huì)定位到在html源代碼中最靠前的一個(gè),而find_elements_by_css_selector會(huì)找到源代碼中所有滿足條件的元素,并以列表的形式返回這些找到的元素。例如,網(wǎng)頁中彈出很多個(gè)提示框,我們要一一去點(diǎn)確定,可以這樣操作

list=driver.find_elements_by_css_selector('input[value=’ 確定 ’]')for l in list:l.click()

但是,如果這些提示框是重疊出現(xiàn)的,而最上層的提示框?qū)嶋H上在源碼中更靠后的位置,那么列表中第一個(gè)“確定”元素就會(huì)被疊在上面的提示框遮擋,無法點(diǎn)擊,這個(gè)時(shí)候倒序一下數(shù)組就可以了,從最后一個(gè)“確定”元素開始點(diǎn)擊

query=driver.find_elements_by_css_selector('input[value=’ 確定 ’]')for q in query[::-1]:q.click()(3)通過xpath定位

xpath定位比較復(fù)雜但是非常全面,當(dāng)這個(gè)元素的class、style屬性和其他元素一樣,實(shí)在沒什么特點(diǎn)可以一步定位的時(shí)候,我們就可以用xpath,先找到我們想要的元素的父子兄弟元素,再定位到我們想要的元素。例如

driver.find_element_by_xpath(’//*[@class='submit clear']/input[1]’).click()text =driver.find_element_by_xpath('//input[@value=’ 確定 ’]/../preceding-sibling::div[1]').textdriver.find_elements_by_xpath('//span[contains(@style,’COLOR: red’)]/span[1]')

引號(hào)中的//表示相對(duì)定位,表示從源代碼中任何地方開始尋找。

//后可以跟任何元素,*代表任意元素,即定位符合屬性篩選任何元素。

中括號(hào)內(nèi)是屬性的篩選條件,@后可以加任意屬性。contains(@style,’COLOR: red’)表示的篩選條件是:style屬性中包含”COLOR:red“。這里為什么不直接用@style=’COLOR: red’

的原因是,可能在我們審查源代碼的時(shí)候這個(gè)元素的style屬性只有’COLOR: red’這一條,但是動(dòng)態(tài)界面的style屬性經(jīng)常變化,程序運(yùn)行時(shí)直接用等于是定位不到這個(gè)元素的。

我們通常需要靠先找到某個(gè)有id的元素,再通過層級(jí)關(guān)系定位到我們真正想要定位的元素,關(guān)于兄弟父子元素定位請(qǐng)參考https://www.jb51.net/article/92673.htm

/.. 可以定位這個(gè)元素的父親元素

/ 可以定位這個(gè)元素的子元素

/preceding-sibling:: 可以定位這個(gè)元素的哥哥元素

/following-sibling:: 可以定位這個(gè)元素的弟弟元素

如/input[1]表示子元素中第一個(gè)input、/../preceding-sibling::div[1]表示父元素的哥哥元素中的第一個(gè)div

(4)通過當(dāng)前節(jié)點(diǎn)定位

有時(shí)候我們會(huì)遇到需要判斷一下元素當(dāng)前的狀態(tài)(是否被選擇)再?zèng)Q定接下來的操作的情況,這時(shí)就需要用一個(gè)變量來保存當(dāng)前節(jié)點(diǎn)

LTE=driver.find_element_by_xpath('//input[@id=’LTE’]/../span[1]'

然后再用get_attribute獲得當(dāng)前節(jié)點(diǎn)元素的屬性,在這個(gè)例子里,如果元素為藍(lán)色,就不需要點(diǎn)擊。代碼實(shí)現(xiàn)為:

if LTE.get_attribute('style')=='COLOR: blue': pass else: LET.click()

需要篩選出特定文本的情況:

red=driver.find_elements_by_xpath('//span[contains(@style,’COLOR: red’)]/span[1]')#找出所有紅色的文本 for r in red: if ’低消’ in r.text:#如果文本信息中包含‘低消’ r.find_element_by_xpath('./../preceding-sibling::input[1]').click()#注意從當(dāng)前節(jié)點(diǎn)定位的時(shí)候要以‘./’開頭 break

如果尋找的元素需要滾動(dòng)界面才能看到,這個(gè)時(shí)候可以用js聚焦此元素,頁面便會(huì)滾動(dòng)到該元素的位置

target=driver.find_element_by_css_selector('input[value=’ 確定 ’]') driver.execute_script('arguments[0].scrollIntoView();', target) target.click()四、不確定情況處理 (1)有可能出現(xiàn)的彈窗

在填表過程中,有些地方有可能出現(xiàn)一個(gè)彈框也有可能不出現(xiàn),這個(gè)時(shí)候,無論這個(gè)彈窗是什么,用try..except語句處理就可以解決

js觸發(fā)的彈窗:

try: driver.find_element_by_css_selector('input[value=’ 確定 ’]').click() except Exception as e: pass

網(wǎng)頁alert彈窗:

try: driver.switch_to.alert.dismiss() except Exception: pass

dismiss()對(duì)應(yīng)的是alert彈窗的”取消“項(xiàng),accept()對(duì)應(yīng)的是”確定“項(xiàng),driver.switch_to.alert.text 可以獲得彈窗的文本內(nèi)容。

(2)數(shù)量不定的彈窗

對(duì)上文提到的多個(gè)提示框情況,除了用 query=driver.find_elements_by_css_selector('input[value=’ 確定 ’]') 一次性找到所有元素再順序或倒序點(diǎn)擊之外,還可以用一個(gè)while循環(huán)解決

while(1): try: driver.find_element_by_css_selector('input[value=’ 確定 ’]').click() except Exception as e: break (3)網(wǎng)絡(luò)延遲

有些網(wǎng)頁在點(diǎn)擊查詢信息之后需要加載一段時(shí)間,加載中的頁面是找不到我們接下來想找的元素的,因此程序就會(huì)報(bào)錯(cuò),此時(shí)有兩種解決方法。

一種是固定等待一段時(shí)間,等待網(wǎng)頁加載完畢,這種方法的缺點(diǎn)是很難找到等待的最佳時(shí)間,太短的話頁面還沒加載完,太長就影響效率

time.sleep(2)

另一種是用一個(gè)while循環(huán)一直尋找下一個(gè)我們要找的元素

while(1): try: driver.find_element_by_id(’continueTrade’).click() break except Exception: pass

這種方法的前提是下一個(gè)要找的元素必定會(huì)出現(xiàn)

五、frame處理

關(guān)于frame處理這篇博客寫得非常好https://www.jb51.net/article/203425.htm

總結(jié)起來就是:frameset不用切,frame層層切。最好一系列填表操作完后都用 driver.switch_to.default_content() 回到原文檔,這樣不容易混亂

這里再補(bǔ)充一點(diǎn)frame沒有id時(shí)的切入方法

frame= self.driver.find_element_by_xpath('/html/body/div[12]/iframe')#先定位frame位置,用一個(gè)變量儲(chǔ)存這個(gè)節(jié)點(diǎn) self.driver.switch_to_frame(frame)#再切入這個(gè)節(jié)點(diǎn)六、excel數(shù)據(jù)讀寫

excel數(shù)據(jù)讀寫十分簡單,看代碼就好了:

def read(file): data = xlrd.open_workbook(file)#打開excel文件 table = data.sheets()[0]#讀取第一個(gè)sheet的數(shù)據(jù) phones = table.col_values(0)#以列表形式存儲(chǔ)第一列數(shù)據(jù) peoples = table.col_values(1)#以列表形式存儲(chǔ)第二列數(shù)據(jù) return phones,peoplesdef write(result): file=xlwt.Workbook()#創(chuàng)建一個(gè)excel文件 table = file.add_sheet(’sheet1’)#添加一個(gè)sheet for i in range(len(result)):#寫入數(shù)據(jù) table.write(i,0,result[i][0]) table.write(i,1,result[i][1]) table.write(i,2,result[i][2]) file.save(’result.xls’)

到此這篇關(guān)于用python-webdriver實(shí)現(xiàn)自動(dòng)填表的示例代碼的文章就介紹到這了,更多相關(guān)python webdriver 自動(dòng)填表內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本欧美韩国一区三区| 伊人久久婷婷| 日韩三级视频| 欧美日韩99| 免费黄网站欧美| 国产精品一国产精品| 精品国产乱码久久久久久樱花| 在线视频精品| 久久国产亚洲| 欧美日韩国产亚洲一区| 亚洲免费专区| 中文亚洲欧美| 九九久久国产| 国产日韩1区| 欧美日韩亚洲三区| 欧美一区91| 欧美精品中文字幕亚洲专区| 亚洲精品免费观看| 久久国产精品久久w女人spa| 久久国产精品亚洲77777| 91久久视频| 国产一区日韩一区| 97久久亚洲| 黑丝一区二区| 高清一区二区三区| 欧美.日韩.国产.一区.二区| 亚洲专区欧美专区| 国产不卡av一区二区| 在线精品福利| 日韩毛片视频| 日韩午夜高潮| 国产亚洲欧美日韩精品一区二区三区| 日韩在线黄色| 日韩不卡手机在线v区| 国产精品免费99久久久| 国产人成精品一区二区三| 精品久久久中文字幕| 国产精品久久久久久久久妇女| 国产精品久久久久久久久久齐齐| 风间由美中文字幕在线看视频国产欧美| 日韩国产一区二| 麻豆国产精品视频| av在线最新| 日韩精品一二区| 日本在线观看不卡视频| 欧美激情福利| 韩国久久久久久| 美女视频黄 久久| 久久要要av| 欧美高清不卡| 日韩av中文字幕一区二区三区| 欧美在线91| 电影亚洲精品噜噜在线观看| 久久伦理在线| 91亚洲无吗| 国产精品久久乐| 日韩欧美高清一区二区三区| 国产一区导航| 中文在线不卡| 国产精品日本| 激情黄产视频在线免费观看| 免费在线观看成人| 亚洲三级网站| 亚洲免费黄色| 视频精品一区二区| 亚洲精品福利| 精品国产乱码久久久久久樱花| 中文字幕人成乱码在线观看| 国产中文一区| 国产日韩欧美一区在线| 国产精品免费大片| 久久精品国产68国产精品亚洲| 亚洲影院天堂中文av色| 给我免费播放日韩视频| 91成人精品视频| 精品1区2区3区4区| 你懂的亚洲视频| 欧美国产91| 久久99久久人婷婷精品综合| 亚洲福利精品| 国产精品欧美大片| 日韩精品久久久久久久电影99爱| 日韩高清一区二区| 成人美女视频| 久久国际精品| 蜜桃av.网站在线观看| 国产一区亚洲| 免费视频一区二区三区在线观看| 麻豆精品视频在线观看免费| 亚洲欧美视频| 九九九精品视频| 亚洲精品在线二区| 中文字幕色婷婷在线视频| 日韩av成人高清| 国产在线不卡| 成人福利av| 国产欧美日韩在线一区二区 | 中文字幕在线高清| 亚洲精品网址| 成人国产精选| 欧美日本久久| 只有精品亚洲| 久久视频精品| 久久免费福利| 亚洲丝袜美腿一区| 精品99在线| 欧美日韩a区| 免费看的黄色欧美网站| 久久九九国产| 国产精品红桃| 青青国产精品| 日韩精品一区第一页| 999国产精品999久久久久久| 国产欧美亚洲一区| 日韩在线播放一区二区| 欧美成人基地| av资源中文在线天堂| 国产精品一线| 欧美激情视频一区二区三区在线播放| 日本成人一区二区| 亚洲在线成人| 国产日韩综合| 日韩精品一区二区三区免费观看| 九九久久国产| 青青伊人久久| 国产日韩一区| 亚洲日本国产| 日韩精品欧美大片| 香蕉久久国产| 日本在线精品| 日韩一区精品字幕| 国产精品免费不| 日韩视频一区| 国产毛片久久| 亚洲性图久久| 欧美 日韩 国产一区二区在线视频| 久久亚洲精品中文字幕蜜潮电影| 欧美 日韩 国产一区二区在线视频| 久久国产精品免费一区二区三区| 一级欧美视频| 高清不卡亚洲| 日韩毛片视频| 中文字幕成在线观看| 久久精品国产久精国产| 日韩视频久久| 欧美国产91| 91久久视频| 欧美在线亚洲| 丝袜美腿亚洲一区二区图片| 91久久国产| 在线综合亚洲| 亚洲在线一区| 四虎成人精品一区二区免费网站| 日韩影院在线观看| 日本精品另类| 777久久精品| 麻豆久久久久久久| 久久精品国产成人一区二区三区| 久久99高清| 国产日韩欧美| 国产精品99久久免费观看| 久久亚州av| 国产福利电影在线播放| 91精品啪在线观看国产18| 91精品一区国产高清在线gif| 午夜久久黄色| 亚洲中字黄色| 国产视频一区二| 久久久国产精品网站| 神马午夜久久| 亚洲一区二区免费看| 中文字幕免费精品| 日本成人中文字幕| 国产精品黑丝在线播放| 国产一区二区三区亚洲综合| 欧美日韩免费观看视频| 99精品电影| 日韩极品在线观看| 91欧美国产| 男女男精品视频网| 国产毛片久久久| 精品视频一区二区三区四区五区| 亚洲一级高清| 在线观看亚洲精品福利片| 免费亚洲婷婷| 久久免费国产| 免费在线看一区| 国产精品综合色区在线观看| 国产精品毛片久久| 日韩精品网站| 一区二区三区四区在线观看国产日韩| 麻豆久久精品| 国产精品chinese| 日韩欧美一区二区三区在线观看| 尹人成人综合网| 国产精品115| 在线日韩av| 国产精品2023| 精品国产乱码久久久久久樱花| 在线 亚洲欧美在线综合一区|