繁体   English   中英

如何从页面提取的href列表中使用driver.get(url)?

[英]how to use driver.get(url) from extracted href list from the page?

我想要 go 到https://www.bookmaker.com.au/sports/soccer ,提取它的足球网址。 然后我想通过 driver.get(url) 对每个网页进行 go。 我已将其作为一个列表完成,然后它为每个这些 url 提取数据并放置在 pandas 中。 我被困在为每个提取的链接获取 driver.get(url) 。 任何帮助表示赞赏。

driver.get(url) 的 CSS/href:

url = #a[class *= 'matches-filter__region']

import time
import pandas as pd
import webdriver_manager.chrome
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
###########################################################################################################################################################

options = webdriver.ChromeOptions()
options.add_argument('--start-maximized')
options.add_experimental_option("detach", True)
service = Service('driver/chromedriver.exe')
driver = webdriver.Chrome(service=Service(webdriver_manager.chrome.ChromeDriverManager().install()), options=options)
driver.get('https://www.bookmaker.com.au/sports/soccer')
aa = driver.find_elements(By.CSS_SELECTOR, "a[class *= 'matches-filter__region']")
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CSS_SELECTOR, "a[class *= 'matches-filter__region']")))
################################################################################################################

for url in aa:
    aa = driver.find_elements(By.CSS_SELECTOR, "a[class *= 'matches-filter__region']")
    driver.get(aa)

##############################################################################

#全码https://pastebin.com/W0VqaKVD

更新了代码,我检查了,它正在工作,导航到同一浏览器 window 中的所有 15 个 url:

diff_country_urls = []
for i in range(len(aa)):
    diff_country_urls.append(aa[i].get_attribute("href"))

for url in diff_country_urls:
    driver.get(url)

使用 VPN 后,我可以连接,但我发现代码没有什么问题

  1. 你必须在for -loop 之前得到aa

  2. find引用浏览器的 memory 中的对象,但是当您使用get()时,它会从 memory 中删除这些对象,以创建新的 object 从新页面中使用,结果是无用的find() 您必须使用.get_attribute('href')将网址作为字符串获取。

  3. 您必须使用for -loop 为列表中的每个字符串运行get() ,并且您必须在此循环中运行其他代码。 在循环之后你必须创建DataFrame

这是循环内没有代码的代码。 但至少它会访问所有网址。

# --- before loop ---

all_a = driver.find_elements(By.CSS_SELECTOR, "a[class *= 'matches-filter__region']")

# get URLs as strings
all_urls = []
for item in all_a:
    all_urls.append(item.get_attribute('href'))

# shorter    
#all_urls = [item.get_attribute('href') for item in all_a]

team1List = []
backOddsList = []
team2List = []
layOddsList = []

# --- loop ---

# visit all pages and get teams

for url in all_urls:
    print(url)

    driver.get(url)

    # here (inside loop) all code to get teams from active page

# --- after loop ---

df = pd.DataFrame({
    'Team1': team1List,
    'Back Odds': backOddsList,
    'Team2': team2List,
    'Lay Odds': layOddsList
})
 
df.to_excel('bookmaker.xlsx', engine='openpyxl', sheet_name='Sheet_name_1', index=False)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM