對于一項研究,我想從位于視口外的網頁中抓取一些鏈接(要查看此鏈接,您需要向下滾動頁面)。
- 頁面示例 ( https://www.twitch.tv/lirik )
- 鏈接示例:https : //www.amazon.com/dp/B09FVR22R2
- 鏈接位于 div class='
Layout-sc-nxg1ff-0 itdjvg default-panel'(頁面上共有 16 個鏈接)。
我已經撰寫了腳本,但我得到了空串列:
from selenium import webdriver
import time
browser = webdriver.Firefox()
browser.get('https://www.twitch.tv/lirik')
time.sleep(3)
browser.execute_script("window.scrollBy(0,document.body.scrollHeight)")
time.sleep(3)
panel_blocks = browser.find_elements(by='class name', value='Layout-sc-nxg1ff-0 itdjvg default-panel')
browser.close()
print(panel_blocks)
print(type(panel_blocks))
頁面加載后我只是得到空串列。這是上面腳本的輸出:
/usr/local/bin/python /Users/greg.fetisov/PycharmProjects/baltazar_platform/Twitch_parser.py
[]
<class 'list'>
Process finished with exit code 0
ps 當 webdriver 打開頁面時,我看到沒有向下滾動操作。它只是打開一個頁面,然后在 time.sleep 冷卻后關閉它。
如何更改腳本以正確獲取鏈接?
任何幫助或建議將不勝感激!
uj5u.com熱心網友回復:
要列印href屬性的值,您必須為visibility_of_all_elements_located()引入WebDriverWait,您可以使用以下任一定位器策略:
使用CSS_SELECTOR:
driver.get("https://www.twitch.tv/lirik") print([my_elem.get_attribute("href") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.Layout-sc-nxg1ff-0.itdjvg.default-panel > a")))])控制臺輸出:
['https://www.amazon.com/dp/B09FVR22R2', 'http://bs.serving-sys.com/Serving/adServer.bs?cn=trd&pli=1077437714&gdpr=${GDPR}&gdpr_consent=${GDPR_CONSENT_68}&adid=1085757156&ord=[timestamp]', 'https://store.epicgames.com/lirik/rumbleverse', 'https://bitly/3GP0cM0', 'https://lirik.com/', 'https://streamlabs.com/lirik', 'https://twitch.amazon.com/tp', 'https://www.twitch.tv/subs/lirik', 'https://www.youtube.com/lirik?sub_confirmation=1', 'http://www.twitter.com/lirik', 'http://www.instagram.com/lirik', 'http://gfuel.ly/lirik', 'http://www.cyberpowerpc.com/', 'https://www.cyberpowerpc.com/page/Intel/LIRIK/', 'https://discord.gg/lirik', 'http://www.amazon.com/?_encoding=UTF8&camp=1789&creative=390957&linkCode=ur2&tag=l0e6d-20&linkId=YNM2SXSSG3KWGYZ7']注意:您必須添加以下匯入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
uj5u.com熱心網友回復:
- 您使用了錯誤的定位器。
- 您應該使用預期條件顯式等待而不是硬編碼暫停。
find_elements當您想要鏈接到元素內的鏈接時,方法會回傳一個 Web 元素串列。
這應該作業得更好:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
browser = webdriver.Firefox()
browser.get('https://www.twitch.tv/lirik')
wait = WebDriverWait(browser, 20)
wait.until(EC.element_to_be_clickable((By.XPATH, "//div[@class='channel-panels-container']//a")))
time.sleep(0.5)
link_blocks = browser.find_element_by_xpath("//div[@class='channel-panels-container']//a")
for link_block in link_blocks:
link = link_block.get_attribute("href")
print(link)
browser.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/397231.html
