時(shí)間:2023-05-20 07:52:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-05-20 07:52:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
猴子都能學(xué)會(huì)的20行代碼登錄微博:如何登錄新浪微博是令許多數(shù)據(jù)新手(包括我)頭疼的大問(wèn)題。由于新浪的反爬蟲策略,網(wǎng)上的教程往往撐不過(guò)幾個(gè)月,查閱到的資料在半年前或是一年前——而它們?cè)缇蜔o(wú)法使用了,在你想開始爬蟲的時(shí)候被活生生卡在了第一步。pip3 install selenium # 如果你使用 Python 2 ,請(qǐng)使用 pip install selenium
僅僅安裝 Selenium 本身是不夠的,你同時(shí)還需要安裝 Driver 。你可以將 Driver 理解為瀏覽器本身的『驅(qū)動(dòng)』,在程序中使用 Driver 就相當(dāng)于你打開了一個(gè)瀏覽器做了些什么事情。from selenium import webdriverdriver = webdriver.Firefox() # 如果 Firefox 所時(shí)使用的 geckodriver 在環(huán)境中# driver = webdriver.PhantomJS() # 如果你想使用 PhantomJS
如果你需要自定義路徑,你可以通過(guò)傳入?yún)?shù) executable_path:driver = webdriver.Firefox(executable_path="/path/to/geckodriver")
如果你使用 Firefox 或 Chrome,你會(huì)看到這個(gè)操作打開一個(gè)瀏覽器。driver.get('https://passport.weibo.cn/signin/login')
如果你使用 Firefox 或 Chrome,你會(huì)看到這個(gè)操作打開微博手機(jī)版的登錄頁(yè)面。name_field = driver.find_element_by_id('loginName') # 用戶名輸入框password_field = driver.find_element_by_id('loginPassword') # 密碼輸入框submit_button = driver.find_element_by_id('loginAction') # 登錄鍵
輸入內(nèi)容name_field.send_keys('你的用戶名')password_field.send_keys('你的密碼')
如果你使用 Firefox 或 Chrome ,你會(huì)看到頁(yè)面中的兩個(gè)輸入框被填入你在程序中輸入的文字。submit_button.click() # 單擊元素
如果你需要使用回車鍵,可以使用send_keys()來(lái)發(fā)送回車(Keys.RETURN),我在這里不展開描述。name_field.clear() # 清除用戶名區(qū)域name_field.send_keys('你的用戶名')password_field.clear() # 清除密碼區(qū)域password_field.send_keys('你的密碼')
獲取 Cookiesdriver.get_cookies()
它是一個(gè)字典文件的列表,每一個(gè)字典文件是一個(gè) Cookie。如果你們要在其他 WebDriver 或?yàn)g覽器中使用這組 Cookies ,使用一個(gè)循環(huán)來(lái)給 WebDriver 利用add_cookie方法添加是比較標(biāo)準(zhǔn)的方法:for cookie in driver.get_cookies(): another_driver.add_cookie(cookie)
等待網(wǎng)頁(yè)載入import time# 在獲取網(wǎng)頁(yè)后time.sleep(2) # 等待2秒
這種做法比較簡(jiǎn)單,但也十分粗暴:因?yàn)槟銦o(wú)法確定2秒時(shí)間足夠讓網(wǎng)頁(yè)加載完成。每次打開網(wǎng)頁(yè)的時(shí)間受限于許多因素,你可能很難用一個(gè)固定的時(shí)間來(lái)決定。而 Selenium 本身也提供了一些好用的方法:from selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC# 在獲取網(wǎng)頁(yè)后WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.ID, 'loginName'))) # 等待 id 為 loginName的元素出現(xiàn),最多20秒
import timefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECdriver = webdriver.PhantomJS()driver.get('https://passport.weibo.cn/signin/login')WebDriverWait(driver, 20).until( EC.presence_of_element_located((By.ID, 'loginName')))time.sleep(1)name_field = driver.find_element_by_id('loginName')name_field.clear()name_field.send_keys('你的賬號(hào)')password_field = driver.find_element_by_id('loginPassword')password_field.clear()password_field.send_keys('你的密碼')submit_button = driver.find_element_by_id('loginAction')submit_button.click()print(driver.get_cookies())
關(guān)鍵詞:學(xué)會(huì),猴子
客戶&案例
營(yíng)銷資訊
關(guān)于我們
客戶&案例
營(yíng)銷資訊
關(guān)于我們
微信公眾號(hào)
版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。