發表文章

Python List

create a=[] 新增一個空序列。 a=[1]*3=[1,1,1] 新增一個序列,裏面放了3個1。 a=[1 for i in range(3)]=[1,1,1] 新增一個序列,裏面放了3個1。 ';'.join(a) 將序列 a 產生一個字串 '1;1;1'。 Reference Python List必學實作 序列类型 --- list, tuple, range Python 推导式 P ython String join()

Selenium WebDriverWait

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def ready (browser:webdriver) -> bool : readyState = browser . execute_script( 'return document.readyState' ) if readyState == 'complete' : return True return False browser = webdriver . Firefox() browser . get( 'http://xxx.xxx.xxx' ) WebDriverWait(browser, 60 ) . until(ready) WebDriverWait(browser, 60 ) . until( lambda browser: browser . execute_script( 'return document.readyState' ) == 'complete' )

selenium timeout

timeout $ python3 Python 3.6.9 (default, Jan 26 2021, 15:33:00) [GCC 8.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from selenium import webdriver >>> browser = webdriver.Firefox() >>> browser.get('http://xxx.xxx.xxx') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/home/test/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 333, in get self.execute(Command.GET, {'url': url}) File "/home/test/.local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/home/test/.local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions

Selenium upload a file

filename = browser . find_element(By . NAME, "filename" ) filename . send_keys(os . path . abspath( "./test.bin" )) 使用 send_keys() 就可以輸入檔案,記住不可以輸入相對位置的檔案,會產生找不到檔案的錯誤。 os.path.abspath() 可以轉換相對位置的檔案。 Reference How to upload file with selenium (Python)?

Selenium select

browser.find_element(By.XPATH,"//select[1]/option[2]").click() 選取第二個 option。 browser.find_element(By.XPATH,"//select[1]").get_attribute("value") 取得目前 select 的值。 Reference 透過 Selenium 操作下拉式選單 (Select) What is the correct way to select an <option> using Selenium's Python WebDriver Python: webdriver操作select下拉选项, selenium设定select选项, selenium select dropdown, Handling Dropdowns

Selenium window

note browser.execute_script("window.open('https://www.google.com/','aaa')") 在視窗名稱aaa載入google網頁,如果視窗aaa不存在,就會新開一個視窗。 browser.execute_script("window.open('')") 直接新開一個視窗,不指定視窗名稱。 browser.execute_script("return window.name") 讀取目前視窗名稱。 browser.switch_to.window(browser.window_handles[0]) 切換第一個視窗,也就是最開始的那個視窗。 browser.switch_to.window(browser.window_handles[1]) 切換第二個視窗。 browser.switch_to.window('aaa') 切換到名稱aaa的視窗。 browser.switch_to.window('') 切換第一個沒有名稱視窗,也就是最開始的那個視窗。 browser.close() 關閉目前的視窗,此時要馬上做 browser.switch_to.window(browser.window_handles[0]) 切換視窗,不然會因為找不到視窗出現錯誤而無法執行任何指令,包含 browser.switch_to.window('') 也會錯誤。 請注意 window.open() 是在目前視窗右邊插入一個新視窗,而不是在最後面再開一個新視窗,還有 window_handles 的 index 是看目前 browser 上的 TAB 位置,而不是看你開啟視窗的順序。 Reference Opening and Closing Tabs Using Selenium How To Switch Tabs In A Browser Using Selenium Python? 快速了解window.name特性与作用

Python debug message

debug.py #!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys import traceback def dump (e: Exception ): #取得錯誤類型 error_class = e . __class__ . __name__ #取得詳細內容 detail = str (e) #取得Call Stack cl, exc, tb = sys . exc_info() #取得Call Stack的最後一筆資料 lastCallStack = traceback . extract_tb(tb)[ -1 ] #取得發生的檔案名稱 fileName = lastCallStack[ 0 ] #取得發生的行號 lineNum = lastCallStack[ 1 ] #取得發生的函數名稱 funcName = lastCallStack[ 2 ] errMsg = "File \" {} \" , line {}, in {}: [{}] {}" . format(fileName, lineNum, funcName, error_class, detail) print (errMsg) if __name__ == "__main__" : try : 111/0 except Exception as e: dump(e) Output $ ./debug.py File "./debug.py", line 26, in <module>: [ZeroDivisionError] division by zero Reference 當Exception發生時,怎麼抓它發生的位置以及詳細原因?