代码之家  ›  专栏  ›  技术社区  ›  muhammad ali

Python Selenium发送_键,执行_脚本,不在fbref中给出任何搜索结果。通用域名格式

  •  0
  • muhammad ali  · 技术社区  · 3 年前

    我无法在fbref中检索任何搜索结果。com,当使用chrome web驱动程序在selenium for python中使用send_键和execute_脚本时

    这是我到目前为止使用的代码:

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service 
    from selenium.webdriver import ActionChains
    from selenium.webdriver.common.by import By
    from selenium.webdriver.common.keys import Keys
    from bs4 import BeautifulSoup
    import pandas as pd
    import numpy as np
    import csv
    from webdriver_manager.chrome import ChromeDriverManager  
    from selenium.webdriver.common.action_chains import ActionChains
    s=Service(ChromeDriverManager().install())
    driver = webdriver.Chrome(service=s)
    driver.get("https://fbref.com/en/")
    element = driver.find_element(by=By.CLASS_NAME, value="ac-hint")
    action = ActionChains(driver)
    element1= driver.find_element(by=By.CSS_SELECTOR, value=("input[type='search']"))
    action.click(on_element=element1)
    action.perform() 
    #element.send_keys("lionel messi")
    #driver.execute_script("arguments[0].value='lionel messi'",element)
    element2=driver.find_element(by=By.CSS_SELECTOR, value=("input[type='submit']"))
    action.click(on_element=element2)
    action.perform()```
    

    代码能够与搜索按钮交互,文本被键入,搜索按钮被点击,没有任何问题,但搜索结果如下:

    which basically means that the search was invalid ,ive tried to search manually in the browser window opened by the driver and that gives me a successful result

    0 回复  |  直到 3 年前
        1
  •  0
  •   Claudio Batista    3 年前

    您在错误的字段中输入了玩家姓名,如果仔细查看html,搜索有两个输入字段。 使用“交流输入”代替“交流提示”:

    element = driver.find_element(by=By.CLASS_NAME, value="ac-input")
    
        2
  •  0
  •   undetected Selenium    3 年前

    这个 locator strategy 你已经确定了 搜索字段 不唯一地标识所需元素 HTML DOM

    4elements


    解决方案

    发送 字符序列 到你需要诱导的元素 WebDriverWait 对于 element_to_be_clickable() 您可以使用以下任一解决方案:

    • 代码块:

      driver.get("https://fbref.com/en/")
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[type='search'][placeholder='Enter Person, Team, Section, etc']"))).send_keys("lionel messi" + Keys.RETURN)
      
    • 笔记 :您必须添加以下导入:

      from selenium.webdriver.common.keys import Keys
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      
    • 浏览器快照:

    lionel messi