0

我是学习 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”是无效的语法。有谁知道这个的解决方案?

4

3 回答 3

1

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

WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.NAME, "q"))
             ^          ^      ^                              ^^            ^^
             1          0      1                              23            21
于 2020-06-28T07:20:55.913 回答
0

在这一行:

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

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

from selenium.webdriver.support.ui import WebDriverWait
于 2020-06-28T09:42:47.837 回答
0

您需要考虑以下几点:

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

    search_box = driver.find_element_by_name('q')
    
  • 当您打算与元素交互而不是presence_of_element_located()您需要的预期条件时element_to_be_clickable()

  • 此外,element_to_be_clickable()应该在 a 内调用,tuple因为它不是函数而是,其中初始化程序只期望隐含self之外的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 ()中找到相关讨论,它需要 2 个位置参数,但使用 WebDriverWait 和 expected_conditions 作为 element_to_be_clickable 和 Selenium Python 给出了 3 个


解决方案

您可以将所需的三 (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
于 2020-06-28T18:22:35.017 回答