【问题标题】:SyntaxError: EOF while scanning triple-quoted string literal within XPath using Selenium and ChromeDriver?SyntaxError:使用 Selenium 和 ChromeDriver 在 XPath 中扫描三引号字符串文字时出现 EOF?
【发布时间】:2022-01-17 21:26:18
【问题描述】:

我正在尝试从 OpenSea 配置文件中收集最近的 NFT 交易活动。由于某种原因,我收到了 SyntaxError,但我无法弄清楚导致错误的原因。我已经对我的所有代码进行了三次检查,但不知道错误的来源。任何建议将不胜感激。我在 MacOS 上。

from selenium import webdriver
from selenium.webdriver.common.by import By

PATH = ('/Users/Chris/Desktop/chromedriver')
driver = webdriver.Chrome(PATH)
driver.get("https://opensea.io/GaryVee")
action = driver.find_element(By.CLASS_NAME, 'Blockreact__Block-sc-1xf18x6-0 Flexreact__Flex-sc-1twd32i-0 ''''FlexColumnreact__FlexColumn-sc-1wwz3hp-0 eaQZLu jYqxGr ksFzlZ')

for action in action:
    nft_name = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[2]/div/div/div/div[2]/span[1]/div/div/a').text
    nft_id = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[2]/div/div/div/div[2]/span[2]/a/div').text
    price_eth = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[3]/div/div[1]/div/div[2]/text()').text
    price_usd = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[3]/div/div[2]/span/div/div').text
    sending_user = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[5]/div/a/span').text
    recieving_user = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[''2]/div[1]/button/div/div[6]/div/a/span').text
    status = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[1]/h6')

这是我的错误代码:

  File "/Users/Chris /PycharmProjects/pythonProject/main.py", line 28
        status = action.find_element(By.XPATH, './/*[@id="main"]/div/div/div[3]/div/div[3]/div[2]/div/div[2]/div[''1]/button/div/div[1]/h6')
                                                                                                                                            ^
SyntaxError: EOF while scanning triple-quoted string literal
Process finished with exit code 1

【问题讨论】:

  • 你看到了什么错误?
  • 为什么你从不接受答案?

标签: python selenium xpath syntax syntax-error


【解决方案1】:

CLASS_NAME 中的三重引号似乎是不必要的或错字。但是,you can't pass multiple classnames through driver.find_element(By.CLASS_NAME, 'classname')

要识别元素,您可以使用以下任一Locator Strategies

  • 使用css_selector

    action = driver.find_element(By.CSS_SELECTOR, ".Blockreact__Block-sc-1xf18x6-0.Flexreact__Flex-sc-1twd32i-0.FlexColumnreact__FlexColumn-sc-1wwz3hp-0.OpenSeaPagereact__DivContainer-sc-65pnmt-0.dBFmez.jYqxGr.ksFzlZ.iRiGb")
    
  • 使用xpath

    action = driver.find_element(By.XPATH, "//*[@class='Blockreact__Block-sc-1xf18x6-0 Flexreact__Flex-sc-1twd32i-0 FlexColumnreact__FlexColumn-sc-1wwz3hp-0 OpenSeaPagereact__DivContainer-sc-65pnmt-0 dBFmez jYqxGr ksFzlZ iRiGb']")
    

【讨论】:

  • 这两个单引号实际上并不是错误(尽管它们是不必要的,但它们不会造成任何伤害)。
  • @kindall 同意了。错误在其他地方,现在更正了。感谢您的帮助。
【解决方案2】:
action = driver.find_element(By.CLASS_NAME, 'Blockreact__Block-sc-1xf18x6-0 Flexreact__Flex-sc-1twd32i-0 ''''FlexColumnreact__FlexColumn-sc-1wwz3hp-0 eaQZLu jYqxGr ksFzlZ')

那行代码包含一个永远不会终止的三引号。

三引号在 Python 中是特殊的。

【讨论】:

    【解决方案3】:

    问题是你在这一行有''''

    action = driver.find_element(By.CLASS_NAME, 'Blockreact__Block-sc-1xf18x6-0 Flexreact__Flex-sc-1twd32i-0 ''''FlexColumnreact__FlexColumn-sc-1wwz3hp-0 eaQZLu jYqxGr ksFzlZ')
    

    这会关闭您的初始字符串文字(以' 开头)并开始一个新的字符串文字(以''' 开头)。你永远不会关闭第二个字符串文字,所以你的代码的其余部分是一个字符串,Python 抱怨它在你没有关闭字符串的情况下就到了程序的末尾。

    我不知道你想用连续的四个撇号做什么,所以我不能告诉你如何解决它,但这就是问题所在。

    【讨论】:

    • CLASS_NAME 带有 blank 个字符 ??
    • 你指的是什么“空白字符”?
    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多