selenium 操作 獲取動態頁面數據


# 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')

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM