Selenium4+Python3系列(八) - Cookie、截圖、單選框及核取方塊處理、富文字框、日曆控制元件操作

久曲健發表於2022-11-24

我所在的城市昨天出了近20+的陽性案例,但這絲毫沒有 “影響” 到996的工作時間,當然,也沒有影響到我想繼續更新文章的決心。

一、cookie常用操作入門

上一篇有寫過關於cookie的實戰案例,個人覺得沒有很好地照顧到入門同學的感受,所以就又更新了關於cookie的基本使用操作。

1、獲取所有cookie資訊

示例程式碼:

cookies = driver.get_cookies()
for cookie in cookies:
    #### 遍歷cookie
    print(cookie)

print('集合長度:' + str(len(cookies)))

2、刪除所有cookie資訊

示例程式碼:

driver.delete_all_cookies()
cookies = driver.get_cookies()
print('刪除後cookies集合長度:' + str(len(cookies)))

3、新增cookie

和JSON很像,必須有name和value值,python叫字典,示例程式碼:

cookie = {'name': 'login', 'value': 'true'}
driver.add_cookie(cookie)

4、獲取指定名稱的cookie資訊

示例程式碼:

login_cookie = driver.get_cookie('login')
print('取出剛新增的cookie值: ' + str(login_cookie))

5、刪除指定名稱的cookie資訊

示例程式碼:

driver.delete_cookie("login")
cookies = driver.get_cookies()
#刪除login後,應該就沒cookie了
print(cookies)

二、截圖操作

1、獲取當前螢幕截圖,使用完整路徑,檔名以時間命名

示例程式碼:

nowTime = time.strftime("%Y%m%d%H%M%S")
driver.get_screenshot_as_file('%s.png' % nowTime)

2、儲存螢幕截圖

示例程式碼:
driver.save_screenshot("testbaidu.png")

3、獲取當前螢幕截圖base64編碼字串

示例程式碼:

driver.save_screenshot("testbaidu.png")
print(driver.get_screenshot_as_base64())

4、獲取當前螢幕截圖的二進位制檔案資料

示例程式碼:

print(driver.get_screenshot_as_png())

三、單選框及核取方塊處理

判斷是否選中:is_selected(),有時單選框、核取方塊會有預設選中的情況,那麼有必要在操作單選框或者核取方塊的時候,先判斷選項框是否為選中狀態。使用element.is_selected()來獲取元素是否為選中狀態,返回結果為布林型別,如果為選中狀態返回True,如果未選中返回為False

至於操作就不必多說了,對大家來講是So Easy,就點選就可以了。

1、單選框

示例程式碼;


**# 獲取第1個單選框李白元素物件
element = driver.find_element(By.CSS_SELECTOR,"[value='0']")
isSelected = element.is_selected()
# 檢視李白是否被選中
if  isSelected:
    print('李白已被選中,你只能選下一個英雄了')

# 獲取第3個單選框露娜元素物件
element = driver.find_element(By.CSS_SELECTOR,"[value='2']")
# 判斷是否被選中
if not element.is_selected():
    # 如果未被選中,就可以直接選了
    element.click()**

2、核取方塊

具體例項程式碼如下:

# 獲取第三個核取方塊公孫離元素物件
element = driver.find_element(By.NAME, "checkbox3")
isSelected = element.is_selected()
# 如果選中取消選中
if isSelected:
    element.click()

# 全選操作
elements = driver.find_elements(By.CSS_SELECTOR, "[type='checkbox']")
# 遍歷選項
for element in elements:
    # 點選選中
    element.click()

四、富文字框操作

1、什麼是富文字編輯器?

富文字編輯器,Rich Text Editor, 簡稱 RTE, 是一種可內嵌於瀏覽器,所見即所得的文字編輯器。

具體長啥樣,如下圖:

image.png

2、透過鍵盤事件操作富文字

透過Tab鍵,先移到富文字框中,自己需要提前數好需要按幾下tab,才能介入,多寫幾個tab,也無妨,因為只有進入富文字,tab相當於縮排了。
示例程式碼如下:

action=ActionChains(driver)
# 滑鼠透過tab要先移到富文字框中(自己需要提前數好需要按幾下tab,才能介入,多寫幾個tab,也無妨,因為只有進入富文字,tab相當於縮排了)
for i in range(1,18):
    action.send_keys(Keys.TAB).perform()
    time.sleep(1)

action.send_keys("歡迎關注公眾號:軟體測試君").perform()

3、透過進入iframe實現操作富文字

示例程式碼如下:

driver.implicitly_wait(30)
# 進入富文字編輯器
driver.switch_to.frame("ueditor_0")
time.sleep(2)
driver.find_element(By.CSS_SELECTOR, ".view").click()
time.sleep(2)
# 輸入文字
driver.find_element(By.CSS_SELECTOR, "[contenteditable='true']").send_keys("歡迎關注公眾號:軟體測試君")
time.sleep(2)
# 選中全部
driver.find_element(By.CSS_SELECTOR, ".view").send_keys(Keys.CONTROL + "a")
time.sleep(2)
# 跳出富文字編輯器
driver.switch_to.default_content()
# 加粗操作
driver.find_element(By.CSS_SELECTOR,".edui-for-bold .edui-icon").click()

4、透過執行js實現富文字操作

示例程式碼如下:

driver.get("https:uutool.cn/ueditor/")
content = "歡迎關注公眾號:軟體測試君";
#ueditor_0為所在iframe的id
js = "document.getElementById('ueditor_0').contentDocument.write('" + content + "');"
driver.execute_script(js)

五、日曆控制元件操作

思路:移除元素的readonly屬性,然後執行輸入操作

示例程式碼如下:

driver.get("https://kyfw.12306.cn/otn/index/init")
# 去掉元素的readonly屬性
js = 'document.getElementById("train_date").removeAttribute("readonly");'
driver.execute_script(js)

# 用js方法輸入日期
# js_value = 'document.getElementById("train_date").value="2022-11-24"'
# driver.execute_script(js_value)

# # # 清空文字後輸入值
driver.find_element(By.ID,"train_date").clear()
driver.find_element(By.ID,"train_date").send_keys("2022-11-24")

寫在最後

我也曾無數次問過自己,該不該繼續堅持寫文章努力更新下去?

也可以說,我曾動搖過,因為做公號遷移後,導致我文章閱讀量及轉載的嚴重下滑,這真的讓我很難受。

回想當初做公號的初心,一是為了交友,找到一些志同道合的技術朋友一起學習,二是,寫出來當做學習筆記,或者可以說是複習筆記。

但更多的可能是期待能得到更多正向反饋,因為能讓我們自己一直持續做某一件事情的原因,多半是來自他人的認可,然後並儘量把這件事情做到更好。

有自己的目標,找到自己努力的方向及節奏,只管堅持去做好了,剩下的就交給時間吧!

我是六哥,請繼續關注我,一直996工作制,更文稍慢,還請諒解,原創不易,不求打賞,只求轉發!

相關文章