selenium
"""
########
# 3 selenium的使用
#######
"""
#1 selenium最初是一個自動化測試工具,而爬蟲中使用它主要是為了解決requests無法直接執行JavaScript代碼的問題
-可以操作瀏覽器(火狐,谷歌(建議你用谷歌),ie),模擬人的行為(人可以干啥,代碼控制就可以干啥)
# pip3 install selenium
"""
# 1、selenium的簡單使用
# from selenium import webdriver
# import time
# # 得到 一個谷歌瀏覽器對象
# # 代碼不能直接操作瀏覽器,需要有一個瀏覽器驅動(配套的)
# # 下載谷歌瀏覽器驅動:http://npm.taobao.org/mirrors/chromedriver/
# # 谷歌瀏覽器驅動要跟谷歌版本對應
# # http://chromedriver.storage.googleapis.com/79.0.3945.36/ 79.0.3945.130(正式版本)
# # 指定一下驅動的位置(相對路徑/絕對路徑)
# bro=webdriver.Chrome(executable_path='./chromedriver.exe')
# bro.get("https://www.baidu.com")
#
# # 頁面內容
# # 相當於它ret.text,可以使用bs4解析數據,或者用selenium自帶的解析器解析
# print(bro.page_source)
# time.sleep(10)
# bro.close()
# 2、常用用法(在輸入框中輸入美女,搜索)
# from selenium import webdriver
# import time
# bro=webdriver.Chrome(executable_path='./chromedriver.exe')
# bro.get("https://www.baidu.com")
# 在輸入框中輸入美女(自帶的解釋器,查找輸入框控件)
# 1、find_element_by_id # id找
# 2、find_element_by_link_text # a標簽上的文字找
# 3、find_element_by_partial_link_text # a標簽上的文字模糊
# 4、find_element_by_tag_name # 根據標簽名字找
# 5、find_element_by_class_name # 根據類名字找
# 6、find_element_by_name # name='xx' 根據name屬性找
# 7、find_element_by_css_selector # css選擇器找
# # 8、find_element_by_xpath #xpath選擇器找
# # input_search = bro.find_element_by_xpath('//*[@id="kw"]')
# input_search = bro.find_element_by_css_selector('#kw')
#
# # 寫入文字
# input_search.send_keys('美女')
#
# # 查找搜索按鈕
# enter = bro.find_element_by_id('su')
#
# # 點擊按鈕
# enter.click()
#
# time.sleep(3)
#
# bro.close()
# 3、小案列
# from selenium import webdriver
# import time
# bro=webdriver.Chrome(executable_path='./chromedriver.exe')
# bro.get("https://www.baidu.com")
#
# # 隱士等待(比如我們讓他最多等待10s)
# # 只有控件沒有加載出來,才會等,控件一旦加載出來,就直接取到
# bro.implicitly_wait(10)
#
# # 點擊百度的登錄
# submit_button = bro.find_element_by_link_text('登錄')
# submit_button.click()
#
# # 用戶名登錄
# user_button = bro.find_element_by_id('TANGRAM__PSP_10__footerULoginBtn')
# user_button.click()
#
# # 輸入用戶名框
# user_input = bro.find_element_by_id('TANGRAM__PSP_10__userName')
# user_input.send_keys('15084785194')
#
# # 輸入密碼框
# pwd_input = bro.find_element_by_id('TANGRAM__PSP_10__password')
# pwd_input.send_keys('zhanyafeng666')
#
# # 登錄
# submit_input = bro.find_element_by_id('TANGRAM__PSP_10__submit')
# submit_input.click()
#
#
# time.sleep(3)
# bro.close()
# 4 獲取cookie
# 登陸之后,拿到cookie:就可以自己搭建cookie池(requests模塊發請求,攜帶者cookie)
# import time
# from selenium import webdriver
# bro=webdriver.Chrome(executable_path='./chromedriver')
# bro.get("https://www.baidu.com")
# print(bro.get_cookies())
# bro.close()
#
# #搭建cookie池和代理池的作用是什么?封ip ,封賬號(弄一堆小號,一堆cookie)
# 5 無界面瀏覽器(驅動谷歌,驅動其他瀏覽器)
# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options
# chrome_options = Options()
# chrome_options.add_argument('window-size=1920x3000') #指定瀏覽器分辨率
# chrome_options.add_argument('--disable-gpu') #谷歌文檔提到需要加上這個屬性來規避bug
# chrome_options.add_argument('--hide-scrollbars') #隱藏滾動條, 應對一些特殊頁面
# chrome_options.add_argument('blink-settings=imagesEnabled=false') #不加載圖片, 提升速度
# chrome_options.add_argument('--headless') #瀏覽器不提供可視化頁面. linux下如果系統不支持可視化不加這條會啟動失敗
#
# bro=webdriver.Chrome(executable_path='./chromedriver',options=chrome_options)
# bro.get("https://www.baidu.com")
# print(bro.get_cookies())
# bro.close()
# 6 獲取標簽屬性
# (重點:獲取屬性)
# print(tag.get_attribute('src'))
# print(tag.get_attribute('href'))
# # (重點:獲取文本)
# print(tag.text)
#
# #獲取標簽ID,位置,名稱,大小(了解)
# print(tag.id)
# print(tag.location)
# print(tag.tag_name)
# print(tag.size)
# 7 顯示等待和隱士等待
# 隱士等待(最多等待10s)
# 只有控件沒有加載出來,才會等,控件一旦加載出來,直接就取到
# bro.implicitly_wait(10)
# 顯示等待(每個控件,都要寫等待),不要使用
# 8 元素交互操作 點擊click,清空clear,輸入文字send_keys
#9 執行js
# from selenium import webdriver
# import time
# bro=webdriver.Chrome(executable_path='./chromedriver')
#
# bro.get("https://www.cnblogs.com")
# # 執行js代碼
# # bro.execute_script('alert(1)')
# # window.scrollTo(0,document.body.scrollHeight)
#
# # 屏幕滑動到底部
# bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
# time.sleep(5)
# bro.close()
# 10 模擬瀏覽器前進后推
# import time
# from selenium import webdriver
# bro=webdriver.Chrome(executable_path='./chromedriver')
#
# bro.get("https://www.cnblogs.com")
# time.sleep(1)
# bro.get("https://www.baidu.com")
# time.sleep(1)
# bro.get("https://www.jd.com")
#
# #退到上一個
# bro.back()
# time.sleep(1)
# # 前進一下
# bro.forward()
#
# time.sleep(5)
# bro.close()
# 10 選項卡管理
# import time
# from selenium import webdriver
#
# browser=webdriver.Chrome(executable_path='./chromedriver')
# browser.get('https://www.baidu.com')
# # 打開一個新窗口
# browser.execute_script('window.open()')
#
# print(browser.window_handles) #獲取所有的選項卡
# browser.switch_to_window(browser.window_handles[1])
# browser.get('https://www.taobao.com')
# time.sleep(2)
# browser.switch_to_window(browser.window_handles[0])
# browser.get('https://www.sina.com.cn')
# browser.close()
# 11 異常處理
from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException,NoSuchFrameException
try:
browser=webdriver.Chrome(executable_path='./chromedriver')
browser.get('http://www.baidu.com')
browser.find_element_by_id("xxx")
except Exception as e:
print(e)
finally:
browser.close()
"""