【问题标题】:Getting NameError: name 'teams' is not defined with Selenium Python获取 NameError:名称“团队”未使用 Selenium Python 定义
【发布时间】:2021-07-14 13:54:25
【问题描述】:

我尝试抓取一个 gemble 网站,当我删除打印代码时,我没有得到输出(过程以退出代码 0 结束)我不知道问题可能是什么

这是代码 -> 从硒导入网络驱动程序 从 selenium.webdriver.chrome.options 导入选项

options = Options()
options.headless = False
web = 'https://fezbet1.com/en/sport?sportids=1'
path = r'C:\Users\Senne\Desktop\Chromedriver\chromedriver.exe'

options.add_argument('window-size=1920x1080')
driver = webdriver.Chrome(path, options=options)
driver.get(web)
driver.maximize_window()

driver.implicitly_wait(10)

frame_ref = driver.find_elements_by_tag_name("iframe")[1]
iframe = driver.switch_to.frame(frame_ref)

box = driver.find_elements_by_class_name('asb-flex-col.asb-cut.asb-pos-wide._asb_events-table-row ')

for data in box :
    teams = data.find_element_by_xpath('.//*[@id="sb"]/div[2]/div[2]/div[2]/div[3]/div/div[1]/div/div[2]/div[1]/div/div/div[2]/div[1]/div/div[2]/div/div/div[2]/div[1]').text
    odds = data.find_element_by_xpath('.//*[@id="sb"]/div[2]/div[2]/div[2]/div[3]/div/div[1]/div/div[2]/div[1]/div/div/div[2]/div[2]/div[1]/div[1]/div/div[2]/div').text

print(teams,odds)

错误说=

Traceback (most recent call last):
  File "C:\Users\Senne\PycharmProjects\webscrapin\main.py", line 25, in <module>
print(teams,odds)
NameError: name 'teams' is not defined

Process finished with exit code 1
------------------

【问题讨论】:

  • 如果box 为空,则永远不会进入该循环,并且永远不会设置teamsodds。此外,您可能不想每次迭代都重新分配这些变量,因为那时您会丢失以前的结果,只会保留最后一个结果。您可能希望在该循环之前创建列表,然后将 append 创建到 teamsodds 列表。

标签: python selenium screen-scraping nameerror


【解决方案1】:

您正在尝试定位对象框(使用 class_name),但对象不在 DOM 上。尝试在box = driver.find_elements_by_class_name('asb-flex-col.asb-cut.asb-pos-wide._asb_events-table-row ') 之前使用sleep(5) 添加隐式等待。 您收到此错误是因为该框为空。

【讨论】:

  • 你是说 sleep(5) driver.implicitly_wait(5) 吗?
  • 我把它放在盒子前面= ...但我仍然没有得到输出
  • 现在尝试 2 件事:1. 使用时间模块添加显式等待 sleep(5) 2. print(box) 在分配后立即。如果它是空的,那么你指定的 class_name 是错误的
  • 我得到的输出是 [] 这意味着它是空的吗?
  • 我会尝试搜索正确的课程
【解决方案2】:

我做了一些更改,这是更新后的代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pandas as pd

options = Options()
options.headless = False
web = 'https://fezbet1.com/en/sport?sportids=1'
path = r'C:\Users\Senne\Desktop\Chromedriver\chromedriver.exe'

options.add_argument('window-size=1920x1080')
driver = webdriver.Chrome(path, options=options)
driver.get(web)
driver.maximize_window()

frame_ref = driver.find_elements_by_tag_name("iframe")[1]
iframe = driver.switch_to.frame(frame_ref)

driver.implicitly_wait(5)

box = driver.find_elements_by_class_name('asb-flex-col.asb-cut.asb-pos-wide._asb_events-table-row ')

Data_list = []

for data in box :
    teams = data.find_element_by_xpath('.//*[@id="sb"]/div[2]/div[2]/div[2]/div[3]/div/div[1]/div/div[2]/div[1]/div/div/div[2]/div[1]/div/div[2]/div/div/div[2]/div[1]').text
    odds = data.find_element_by_xpath('.//*[@id="sb"]/div[2]/div[2]/div[2]/div[3]/div/div[1]/div/div[2]/div[1]/div/div/div[2]/div[2]/div[1]/div[1]/div/div[2]/div').text
    data_items = {
        'teams' : teams,
        'odds' : odds,
    }

    Data_list.append(data_items)

df = pd.DataFrame(Data_list)
print(df)

我现在得到的输出只是=

Empty DataFrame
Columns: []
Index: []

Process finished with exit code 0

【讨论】:

  • 这不是答案,请使用问题正文更新此详细信息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2011-01-17
  • 2020-09-04
  • 2021-10-18
相关资源
最近更新 更多