【问题标题】:How can I fix this syntax error using WebDriverWait in Selenium Python如何在 Selenium Python 中使用 WebDriverWait 修复此语法错误
【发布时间】:2020-06-28 07:12:24
【问题描述】:

我是学习 python 的初学者,我的代码有问题。 这似乎是一个简单的错误,但我找不到此错误的解决方案。

这是代码

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.google.co.jp/")
WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.NAME, "q"))
search_box = driver.find_element_by_name('q')
search_box.send_keys('Selenium')

  File "<ipython-input-12-1cac2821f197>", line 4
    search_box = driver.find_element_by_name("q")
             ^
SyntaxError: invalid syntax

search_box.submit()


driver.implicitly_wait(10)
driver.find_element_by_link_text("Selenium - Web Browser Automation").click()
time.sleep(5)
driver.quit()

问题出在第 6 行。 我试图运行代码,但它说“search_box”是无效的语法。 有谁知道这个的解决方案吗?

【问题讨论】:

  • 第 5 行末尾是否缺少右括号?
  • 发布整个回溯。我们习惯于通过它提供的信息发现错误。
  • WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.NAME, "q")) 数一下(s 和)s。

标签: python selenium syntax-error webdriverwait expected-condition


【解决方案1】:

语法错误经常出现在上面的行中,尤其是当这些行包含括号时。一个技巧是计算打开和关闭括号。如果结果不为零,则有问题:

WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.NAME, "q"))
             ^          ^      ^                              ^^            ^^
             1          0      1                              23            21

【讨论】:

  • 谢谢!我可以修复我的代码,但随后发生了另一个问题。它说“名称'WebDriverWait'未定义”“WebDriverWait”应该是python的语法之一。不是吗?我不明白。
  • Python 有诸如“for”和“if”之类的关键字以及诸如“open”之类的一些内置对象,但大多数情况下您正在处理需要导入的函数和类。 from selenium import webdriver 就是一个很好的例子。我不知道硒具体或“WebDriverWait”来自哪里。您需要返回使用它的教程并查找 import 语句。
【解决方案2】:

在这一行:

WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.NAME, "q"))

最后缺少一个右括号。 并且 WebDriverWait 尚未导入:

from selenium.webdriver.support.ui import WebDriverWait

【讨论】:

    【解决方案3】:

    您需要考虑以下几点:

    • 一旦你诱导了WebDriverWait,你就不必再次使用find_element_by_*。所以你可以删除该行:

      search_box = driver.find_element_by_name('q')
      
    • 当您打算与元素而不是 presence_of_element_located() 进行交互时,您需要 expected_conditionselement_to_be_clickable()

    • 此外,element_to_be_clickable() 应该在 tuple 中调用,因为它不是一个函数,而是一个,其中初始化程序只需要1 隐式 自我的论点:

      class element_to_be_clickable(object):
          """ An Expectation for checking an element is visible and enabled such that you can click it."""
          def __init__(self, locator):
              self.locator = locator
      
          def __call__(self, driver):
              element = visibility_of_element_located(self.locator)(driver)
              if element and element.is_enabled():
                  return element
              else:
                  return False
      

    您可以在init() takes 2 positional arguments but 3 were given using WebDriverWait and expected_conditions as element_to_be_clickable with Selenium Python找到相关讨论


    解决方案

    您可以将所需的三 (3) 行合并为一行,如下所示:

    WebDriverWait(driver, 10).until((EC.element_to_be_clickable(By.NAME, "q"))).send_keys('Selenium')
    

    注意:您必须添加以下导入:

    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.by import By from selenium.webdriver.support import expected_conditions as EC 现在我的代码可以正常工作了
    • @TatsuyaHori 很高兴能为您提供帮助!请accept answer 点击我的 answer 旁边的空心刻度线,它就在 votedown 箭头下方,这样刻度线就会变成 绿色.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2023-03-09
    相关资源
    最近更新 更多