我想湊帶班錨鏈接=「_ 1UoZlX」從這個特定頁面的搜索結果 - https://www.flipkart.com/search?as=on&as-pos=1_1_ic_sam&as-show=on&otracker=start&page=6&q=samsung+mobiles&sid=tyy%2F4io刮元素反應JS與BeautifulSoup
當我創建頁面上的一湯,我意識到,搜索結果正在使用React JS呈現,因此我無法在頁面源代碼中找到它們(或在湯中)。
這裏是我的代碼
import requests
from bs4 import BeautifulSoup
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
listUrls = ['https://www.flipkart.com/search?as=on&as-pos=1_1_ic_sam&as-show=on&otracker=start&page=6&q=samsung+mobiles&sid=tyy%2F4iof']
PHANTOMJS_PATH = './phantomjs'
browser = webdriver.PhantomJS(PHANTOMJS_PATH)
urls=[]
for url in listUrls:
browser.get(url)
wait = WebDriverWait(browser, 20)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "_1UoZlX")))
soup = BeautifulSoup(browser.page_source,"html.parser")
results = soup.findAll('a',{'class':"_1UoZlX"})
for result in results:
link = result["href"]
print link
urls.append(link)
print urls
這是我得到的錯誤。
Traceback (most recent call last):
File "fetch_urls.py", line 19, in <module>
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "_1UoZlX")))
File "/usr/local/lib/python2.7/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Screenshot: available via screen
有人在this answer提到,有使用硒來處理網頁上的JavaScript的方式。有人可以詳細說明嗎?我做了一些谷歌搜索,但無法找到適用於這種特殊情況的方法。
我正在使用無頭瀏覽器。可能是這個原因。將嘗試與常規瀏覽器。 – dontpanic
無頭瀏覽器應該可以正常工作。普通瀏覽器將很容易看到輸出。問題修復後,您可以切換到常規瀏覽器。 Flipkart在大多數時間打開錯誤頁面。您應該讓腳本在發生時單擊「重試」按鈕。 – Sriraman