# selenium from selenium import webdriver import time driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://www.baidu.com/') time.sleep(5) driver.close() # 關閉頁面 driver.quit() # 關閉整個瀏覽器
# selenium 定位元素 常用的6種 # find_element只獲取滿足條件的第一個, find_elements獲取所有滿足條件的 1.find_element_by_id 2.find_element_by_class_name 3.find_element_by_name 4.find_element_by_tag_name 5.find_element_by_xpath 6.find_element_by_css_selector ############################ from selenium import webdriver import time from lxml import etree driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://www.baidu.com/') # 使用 xpath 方式獲取 效率高 如果只是解析頁面就使用這種 tree = etree.HTML(driver.page_source) li_lists = tree.xpath('xxxxxxxxxx') # 通過id 的方式獲取 如果對元素進行操作時, # 比如要發送字符串, 點擊按鈕, 下拉操作 就使用這種方法 inputTag = driver.find_element_by_id('kw') inputTag.send_keys('python') time.sleep(3) driver.close() # 關閉頁面 # driver.quit() # 關閉整個瀏覽器
# 常見的表單元素: # input標簽 type='text/password/email/number' 屬於文本框 # button、input type='submit' # checkbox type=‘checkbox’ # ############### # 操作表單元素 # 1. 操作輸入框 inputTag = driver.find_element_by_id('kw') inputTag.send_keys('python') time.sleep(3) # 2. 操作checkbox標簽 豆瓣為例 rememberBtn = driver.find_element_by_name('remember') rememberBtn.click() # 3. 操作select標簽 要用Select類 from selenium import webdriver from selenium.webdriver.support.ui import Select selectBtn = Select(driver.find_element_by_name('jumpMenu')) selectBtn.select_by_index(1) # 通過index 選中下拉框里的選項 # selectBtn.select_by_visible_text('95秀客戶端') 通過文本內容選中 # 4. 按鈕的點擊事件 inputTag = driver.find_element_by_id('kw') #拿到輸入框按鈕 inputTag.send_keys('python') submitTag = driver.find_element_by_id('su') #拿到點擊按鈕 submitTag.click()
# selenium 的行為鏈 簡單介紹 有時候頁面中的操作有很多步,需要一系列操作 # 在爬蟲中用的不多, 在測試用的多 from selenium import webdriver import time from selenium.webdriver.common.action_chains import ActionChains driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://www.baidu.com/') # 拿到兩個標簽 inputTag = driver.find_element_by_id('kw') submitBtn = driver.finr_element_by_id('su') actions = ActionChains(driver) actions.move_to_element(inputTag) actions.send_keys_to_element(inputTag,'python') actions.move_to_element(submitBtn) actions.click(submitBtn) actions.perform()
# 在selenium中 cookies操作 # 1.獲取所有的cookie for cookie in driver.get_cookies(): print(cookie) # 2.根據cookie的key獲取value value = driver.get_cookie(key) # 3.刪除所有的cookie driver.delete_all_cookies() # 4.刪除某一個cookie driver.delete_cookie(key) ################################# from selenium import webdriver import time driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://www.baidu.com/') for cookie in driver.get_cookies(): # 獲取的是百度域名下的所有cookie print(cookie)
# 頁面等待 重要 防止數據沒有被加載就開始使用 # 因為頁面很多用ajax技術,有時候要使用的數據沒有加載出來,這時候使用就會報錯.所以selenium提供兩種等待方式 # 隱式等待: 調用driver.implicitly_wait. 那么獲取不可用元素之前會先等待10秒時間. driver = webdriver.Chrome(executble_path=driver_path) driver.implicitly_wait(10) # 設置等待時間 driver.get('https://www.baidu.com/') #請求訪問 # 顯示等待:表明某個條件成立之后才執行獲取元素的操作. # 也可以在等待的時候制定一個最大的時間,如果超過這個時間那么久跑出異常. # 顯示等待使用selenium.webdriver.support.excepted_condition期望條件 和 selenium.webdriver.support.ui.webDriverWait配合完成 from selenium import webdriver import time from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://www.baidu.com/') # 等待10秒后找這個對應的id標簽, 因為是錯誤的所以等待10秒后報錯 # 如果是正確的id 標簽, 找到后直接繼續執行, 不會等10 秒 WebDriverWait(driver,10).until( EC.presence_of_element_located((By.ID,'shjdkah')) )
# 打開多個窗口, 切換頁面 重要 ****** from selenium import webdriver import time driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path) driver.get('https://www.baidu.com/') # 打開豆瓣 driver.execute_script('window.open("https://www.douban.com/")') # 但是當前的driver還是停留在baidu頁面 print(driver.current_url) print(driver.window_handles) # 窗口句柄 看看現在打開的窗口有什么 driver.switch_to_window(driver.window_handles[1]) # 切換窗口 print(driver.current_url) # 雖然在窗口中切換到了新的頁面,但是driver中還沒有切換 # 如果想要在代碼中切換到新的頁面,並且做爬蟲 # 那么應該使用dirver.switch_to_window來切換到指定的窗口 # 從dirver.window_handler中取出具體的第幾個窗口 # driver.window_handlers是一個列表,里面裝的都是窗口句柄 # 它會按照打開頁面的順序存儲窗口句柄
# selenium 設置代理ip 主要是添加一個option參數就可以了 from selenium import webdriver # 設置代理 options = webdriver.ChromeOptions() options.add_argument("--proxy-server-http://112.247.176.104:8060") driver_path = r"G:\Crawler and Data\chromedriver.exe" driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options) driver.get('http://httpbin.org/ip')
