關(guān)于selenium遇到控件的問題

常規(guī)的網(wǎng)頁抓取或者設(shè)計簡單的js加密都可以很好的用http客戶端模擬出來

但是如果安全性高一些的網(wǎng)站重斑,比如銀行、酒店信息、某些工商網(wǎng)站的信息膜毁,這些站點(diǎn)的反扒措施往往做的比較好,其中一種比較頭疼的方式就是控件問題了愤钾,很多銀行都使用了安全控件的加密措施

模擬請求的話瘟滨,無法定位到input輸入框,即便用selenium也無法定位

這里就涉及到windows的機(jī)制了能颁,windows中每個窗口對象都有一個句柄標(biāo)識符杂瘸,用整型來標(biāo)識不同的句柄,可以調(diào)用win32的庫去通過句柄伙菊,定位到控件框

from ctypes import windll

u32 = windll.LoadLibrary('user32.dll')

注意user32.dll文件败玉,windows系統(tǒng)自帶的調(diào)用接口,里面的一些api镜硕,可以通過句柄定位到對應(yīng)的輸入框

切換輸入框的api:

      def switch_to_hwnd(hwnd):
        assert type(hwnd) == int
        u32.SwitchToThisWindow(hwnd, True)

其中hwnd為int類型运翼,表示定位的句柄框

以上解決了第一個難題,接下來試著向控件框中輸入字符兴枯,就麻煩了血淌,selenium的driver.send_keys方法只能向普通的dom輸入框輸入字符,無法輸入控件

這里就需要鍵盤模擬程序來解決問題了,windows自帶了一個軟件盤悠夯,嘗試調(diào)用自帶軟鍵盤輸入癌淮,控件框并不能接收到字符,應(yīng)該是一種安全措施沦补,普通的輸入無法向輸入框中輸入字符

推薦的方案是乳蓄,調(diào)用winIO庫,使用更加底層的機(jī)制夕膀,該庫是c++實現(xiàn)的虚倒,python有對應(yīng)的封裝:
https://pypi.org/project/rabird.winio/
pypi有具體的使用方法

pypi給出示例代碼也很清晰,接口基本上已經(jīng)封裝好了

  def key_press(scancode, press_time=0.2):
    key_down(scancode)
    time.sleep(press_time)
    key_up(scancode)

調(diào)用這個函數(shù)就可以店诗,其中scancode是鍵盤信號映射裹刮,推薦把它放到字典中調(diào)用,可以從網(wǎng)上搜索到:

WIO_CODE = {
  'backspace': 0x0E, 'tab': 0x0F, 'enter': 0x1C, 'caps_lock': 0x3A, 'esc': 0x01,
  'spacebar': 0x39, '0': 0x0B, '1': 0x02, '2': 0x03,  '3': 0x04, '4': 0x05,
  '5': 0x06, '6': 0x07, '7': 0x08, '8': 0x09, '9': 0x0A, 'a': 0x1E, 'b': 0x30,
  'c': 0x2E, 'd': 0x20, 'e': 0x12, 'f': 0x21, 'g': 0x22, 'h': 0x23, 'i': 0x17,
  'j': 0x24, 'k': 0x25, 'l': 0x26, 'm': 0x32, 'n': 0x31, 'o': 0x18, 'p': 0x19,
  'q': 0x10, 'r': 0x13, 's': 0x1F, 't': 0x14, 'u': 0x16, 'v': 0x2F, 'w': 0x11,
  'x': 0x2D, 'y': 0x15, 'z': 0x2C, 'F1': 0x3B, 'F2': 0x3C, 'F3': 0x3D,
  'F4': 0x3E,'F5': 0x3F, 'F6': 0x40, 'F7': 0x41, 'F8': 0x42, 'F9': 0x43, 
  'F10': 0x44, 'F11': 0x57, 'F12': 0x58, 'num_lock': 0x45, 'scroll_lock': 0x46, 
  'left_shift': 0x2A, 'right_shift ': 0x36,'left_control': 0x1D, ',': 0x33,
  '-': 0x0C,'.': 0x34, '/': 0x35, '`': 0x29, ';': 0x27,  '[': 0x1A,']': 0x1B,
}

遍歷要輸入的字符串庞瘸,調(diào)用key_press方法即可捧弃,大寫字母輸入要press一下CapsLock, 可以封裝一下具體輸入方法:

def input_key(element):
    upper = 'QWERTYUIOPASDFGHJKLZXCVBNM'
    # key_press(WIO_CODE['left_shift'])
    if element in upper:
        key_press(WIO_CODE['caps_lock'])
        time.sleep(0.1)
        key_press(WIO_CODE[element.lower()])
        time.sleep(0.1)
        key_press(WIO_CODE['caps_lock'])
    else:
        if element not in WIO_CODE:
            print('error input char')
            return False
        key_press(WIO_CODE[element])
        time.sleep(0.1)
    return True

這樣,基本的問題就都解決啦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末擦囊,一起剝皮案震驚了整個濱河市违霞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞬场,老刑警劉巖买鸽,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贯被,居然都是意外死亡眼五,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門彤灶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來看幼,“玉大人,你說我怎么就攤上這事幌陕∷薪” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵搏熄,是天一觀的道長棚唆。 經(jīng)常有香客問我,道長心例,這世上最難降的妖魔是什么宵凌? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮契邀,結(jié)果婚禮上摆寄,老公的妹妹穿的比我還像新娘。我一直安慰自己坯门,他們只是感情好微饥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著古戴,像睡著了一般欠橘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上现恼,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天肃续,我揣著相機(jī)與錄音,去河邊找鬼叉袍。 笑死始锚,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的喳逛。 我是一名探鬼主播瞧捌,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼润文!你這毒婦竟也來了姐呐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤典蝌,失蹤者是張志新(化名)和其女友劉穎曙砂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體骏掀,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鸠澈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了截驮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑陈。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖侧纯,靈堂內(nèi)的尸體忽然破棺而出新锈,到底是詐尸還是另有隱情,我是刑警寧澤眶熬,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布妹笆,位于F島的核電站,受9級特大地震影響娜氏,放射性物質(zhì)發(fā)生泄漏拳缠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一贸弥、第九天 我趴在偏房一處隱蔽的房頂上張望窟坐。 院中可真熱鬧,春花似錦、人聲如沸哲鸳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徙菠。三九已至讯沈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間婿奔,已是汗流浹背缺狠。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萍摊,地道東北人挤茄。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像冰木,于是被迫代替她去往敵國和親穷劈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,075評論 25 707
  • 洞見SELENIUM自動化測試 寫在最前面:目前自動化測試并不屬于新鮮的事物片酝,或者說自動化測試的各種方法論已經(jīng)層出...
    厲鉚兄閱讀 6,728評論 3 47
  • 2017年11月21日囚衔,這是我第三次來到肇慶,不變的是這座城市給予我的無奈雕沿,改變了的是自己的心境练湿,曾經(jīng)我覺得朝九晚...
    蔡牧桐閱讀 472評論 0 0
  • 當(dāng)校領(lǐng)導(dǎo)宣布開幕式正式結(jié)束肥哎,運(yùn)動會正式開始的時候,我的淚唰的一下就出來了疾渣,強(qiáng)忍到結(jié)束跑出會場篡诽,笑著跟一曼說,咱們終...
    滿嘴胡話_閱讀 909評論 10 11
  • 很早就醒來 夢到和他一起工作 他被我嚇跑了 跑的離我好遠(yuǎn) 一條信息后 就再也找不到人影 我害怕 驚醒
    我是你飽飽閱讀 138評論 0 0