我正在嘗試刮取這個頁面https://rarity.tools/thecryptodads。 在python中使用Selenium。
在下面每張卡片的右上方,都有所有者的名字,其中包含一個鏈接,一旦按下,就會帶你到該所有者的頁面。
當我檢查該元素時,我可以清楚地看到帶有href鏈接的a標簽,如下所示。 在此輸入圖片描述
然而,當我試圖抓取它時,它既沒有得到a標簽內的文本,也沒有得到href。 我試圖獲取它上面包含這個a標簽的div以及另一個包含卡片上位于左上角的數字的div,但是當我獲取這個div的innerText時,它只得到第一個div的文本,也就是數字。(第一張卡列印為1)。
以下是我試圖獲得鏈接的代碼:
PATH = "C:Program Files (x86)chromedriver"
driver = webdriver.Chrome(PATH)
driver.implicitly_wait(10)
driver.get("https://rarity.tools/thecryptodads")
try:
click = WebDriverWait(driver, 10).until(
EC.existence_of_element_located(
(By.XPATH, "/html/body/div/div[2]/div[8]/div[1]/div/div[1]/a")
)
print(click.text)
except:
print()
我試著通過類名、css選擇器、xpath、full xpath來獲取專案,但仍然無法獲得href。 但是當我進入除錯狀態并逐行查看時,我可以看到這個物件保存著我想要的文本,并在執行結束時列印出來。這對我來說太奇怪了。
uj5u.com熱心網友回復:
當你使用".text "時,你會得到該元素的文本值。
要找到'a'標簽的'href'屬性,你需要使用".get_attribute('href')"。
在你的例子中click.get_attribute('href').
uj5u.com熱心網友回復:
實際上,資料也是從api呼叫json回應中生成的。 以下是作業實體:
代碼:
代碼:
import requests
import pandas as pd
import json
#headers = {'User-Agent': ' Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36'}
資料 = []
r = requests.get('https://api.opensea.io/api/v1/assets? asset_contract_address=0xecdd2f733bd20e56865750ebce33f17da0bee461&limit=20&token_ids=1552&token_ids=4191&token_ids=9123&token_ids=3428&token_ids=8334&token_ids=5819&token_ids=5593&token_ids=3592& token_ids=7731&token_ids=257&token_ids=2290&token_ids=2259&token_ids=6103&token_ids=4778&token_ids=3309&token_ids=1787&token_ids=7684&token_ids=8322&token_ids=2464&token_ids=2389')
for item in r.json()['assets'] 。
data.append ([
item['name']。
item['token_id']]
])
df = pd.DataFrame(data, columns=["Name", "token_id"] )
print(df)
輸出:
Name token_id
0 切碎的爸爸 #9123 9123
1 OG爸爸 #8334 8334
2 CryptoDad #8322 8322
3 CryptoDad #7684 7684
4 CryptoDad #7731 7731
5 CryptoDad #6103 6103
6 CryptoDad #5819 5819
7 CryptoDad #5593 5593
8 CryptoDad #4778 4778
9 FrankenDad #4191 4191
10 CryptoDad #3592 3592
11 鉆石爸爸 #3428 3428
12 CryptoDad #3309 3309
13 CryptoDad #2464 2464
14 CryptoDad #2389 2389
15 CryptoDad #2290 2290
16 CryptoDad #2259 2259
17 CryptoDad #1787 1787
18 Abducted Beer Belly #1552 1552
19 CryptoDad #257 257
uj5u.com熱心網友回復:
我不知道為什么.get_attribute('href')只是給了我https://rarity.tools/thecryptodads#網址,這并不是想要的輸出。
另外,ActionChains是為了讓Selenium在UI中看到網頁元素。
作為一個變通方法,我所做的是點擊 鏈接,它在一個新標簽中打開,然后從那里我可以得到鏈接。
driver = webdriver.Chrome(driver_path)
driver.maximum_window()
#driver.implicitly_wait(30)/span>
wait = WebDriverWait(driver, 50)
action = ActionChains(driver)
driver.get("https://rarity.tools/thecryptodads")
try:
ele = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@class, 'flex-grow font-extrabold')]//following-sibling::a" ))
action.move_to_element(ele).perform()
print(ele.get_attribute('href')
time.sleep(5)
ele.click()
driver.switch_to.window(driver.window_handles[1] )
time.sleep(5)
print(driver.current_url)
except:
print("Something else"/span>)
匯入 :
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
輸出 :
https://rarity.tools/thecryptodads#
https://opensea.io/accounts/0x8f612b1a1afcc4a55879bb02212454ae79cab04b?ref=0x5c5321ae45550685308a405827575e3d6b4a84aa
uj5u.com熱心網友回復:
請嘗試以下方法:
# catching that particular element with its xpath
click = driver.find_element_by_xpath("//*[@id='__layout']/div/div[2]/div[2]/div[11]/div[2]/div[1]/div/a"/span>).get_attribute("href"/span>)
#提取該元素的href。
href = click.get_attribute("href")
print(href)
輸出:
https://rarity.tools/nfh
uj5u.com熱心網友回復:
網站需要時間來加載所有的屬性值。
有兩種方法可以獲得該輸出。
1: 在driver.get(URL)之后應用time.sleep(10)。
driver.get("https://rarity.tools/thecryptodads")
time.sleep(10)
ele = driver.find_element_by_xpath("//div[contains(@class,'flex-1')]/div[2]/div[8]/div[1]/div/div[1]/a"/span>)
print(ele.get_attribute("href"/span>)
print(ele.text)
2:應用明確的等待,直到href屬性有一個從https開始的值。
driver.get("https://rarity.tools/thecryptodads")
wait= WebDriverWait(driver,30)
wait.until(EC.presence_of_element_located((By.XPATH,"//div[contains(@class,'flex-1')]/div[2]/div[8]/div[1]/div[1]/div/div[1]/a[contains(@href,'https') ] ") )
ele = driver.find_element_by_xpath("//div[contains(@class,'flex-1')]/div[2]/div[8]/div[1]/div/div[1]/a")
print(ele.get_attribute("href"/span>)
print(ele.text)
1和2的輸出:
https://opensea. io/accounts/0x8f612b1a1afcc4a55879bb02212454ae79cab04b?ref=0x5c5321ae45550685308a405827575e3d6b4a84aa
0x8f61
與絕對值相比,選擇相對值的xpath更好。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/326930.html
標籤:
上一篇:為什么這個地圖的回圈代碼不作業?
