Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
seleniumpython中的元素识别问题_Python_Selenium - Fatal编程技术网

seleniumpython中的元素识别问题

seleniumpython中的元素识别问题,python,selenium,Python,Selenium,这是我目前的代码: from selenium import webdriver from selenium.webdriver.common.by import By import time from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome(execu

这是我目前的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome(executable_path= "C:\Drivers\chromedriver")
driver.get("https://www.expedia.com/")
driver.maximize_window()
driver.implicitly_wait(5)

driver.find_element(By.XPATH, "//*[@id='uitk-tabs-button-container']/li[2]/a/span").click()
time.sleep(15)
driver.find_element(By.ID, "location-field-leg1-origin-dialog-trigger").send_keys("BLR")
driver.find_element(By.ID, "location-field-leg1-destination-dialog-trigger").send_keys("BOM")
driver.find_element(By.ID, "departure").send_keys("Fri Nov 06 2020")
driver.find_element(By.XPATH, "//*[@id='root']/div/div[2]/div/div/div[2]/p/a").click()
我正试图找出其中的要素

Flightslink、origininputbox、destinationinputbox、dateinputbox和searchlink

但是没有运气。。。总是得到

NoSuchElementException:消息:没有这样的 元素:找不到元素:


我是selenium的初学者,请帮助。

这很棘手,因为最终要设置出发和返回日期,您必须单击日历并选择各种日期按钮。也许更详细的调查可能会揭示一种执行JavaScript脚本向底层小部件添加日期的方法。但我至少会让你开始。主要问题是,要输入(例如)出发机场,您必须首先单击出发按钮,然后弹出一个以前隐藏的输入区域,您现在可以在其中输入信息,然后返回以关闭输入:

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


driver = webdriver.Chrome(executable_path= "C:\Drivers\chromedriver")
driver.get("https://www.expedia.com/")
driver.maximize_window()
driver.implicitly_wait(5)
try:
    driver.find_element(By.XPATH, "//*[@id='uitk-tabs-button-container']/li[2]/a/span").click()

    # Leaving from:
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div[1]/div/div[1]/div[3]/div/figure/div[3]/div/div/div/div/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div[1]/div/div/div/div/div[1]/button").click()
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div[1]/div/div[1]/div[3]/div/figure/div[3]/div/div/div/div/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div[1]/div/div/div/div/div[2]/header/section/div/input").send_keys("BLR" + Keys.RETURN)

    # Arriving to:
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div[1]/div/div[1]/div[3]/div/figure/div[3]/div/div/div/div/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div[2]/div/div/div/div/div[1]/button").click()
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div[1]/div/div[1]/div[3]/div/figure/div[3]/div/div/div/div/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div[2]/div/div/div/div/div[2]/header/section/div/input").send_keys("BOM" + Keys.RETURN)

    # Departing:
    # open calendar:
    driver.find_element(By.ID, "d1-btn").click()
    input('pausing so you can see the calendar...')
    # pick dates (this is the tricky bit) -- code omitted:
    # finally click "Done":
    driver.find_element(By.XPATH, "/html/body/div[1]/div[1]/div/div[1]/div/div[1]/div[3]/div/figure/div[3]/div/div/div/div/div[2]/div/form/div[2]/div/div[1]/div/div[2]/div/div/div/div[1]/div/div[2]/div/div[2]/button").click()
finally:
    input('pausing before termination...')
    driver.quit()
请注意,浏览器窗口的焦点必须是当前窗口,否则find_元素调用可能会失败。无论如何,这就是我的经历

这就是我所看到的:


我也在其他网站上尝试过,但找不到正确的元素ID/name/xpath。。。如果我检查元素,会有很多信息。请有人帮忙作为旁白:不要使用driver.implicitly\u wait and time.sleep-只使用前者,并在程序开始时将其设置为您认为必要的最大值。然后,您将等待直到找到元素,直到指定的最长时间。但是如果你说time.sleep15,你总是会等待15秒,即使元素很快可用。哪条语句会引发异常?包括stacktrace。当我运行它时,它似乎无法查找id location-field-leg1-origin-dialog-trigger。当我检查第一次成功单击后显示的表单时,它被初始化为往返,但您没有指定返回日期,您的出发日期似乎格式错误。根据您单击日历并选择日期时填充的内容,“11月6日”将是正确的,但我找不到具有您要查找的id的输入字段。我们看的是同一张表格吗?您还应该确保无论是否遇到异常都退出驱动程序try/finally;请帮助我单击“航班”按钮,然后输入航班自/至详细信息,因为脚本本身在此处失败。运气不好,从步骤退出时脚本再次失败。。消息:没有这样的元素:找不到elemet。它适合我。我已经更新了答案以显示我所看到的。确保Chrome窗口有焦点,也就是说,一旦它弹出,就切换到Chrome窗口。我不确定Chrome窗口是否有焦点:你能帮我设置焦点吗?我的意思是,当Selenium驱动的Chrome窗口打开时,快速将其设为当前窗口。我不明白,实际上,在运行脚本之前,我已经关闭了所有浏览器窗口。所以从技术上讲,执行时只打开一个窗口。如何确保Selenium专注于该窗口?。。