我怎么能通过跨度之间的这段文本使用硒找到这个项目?
How could I find this item using selenium by this text in between the span?
我正试图通过中间的这段文字找到这个项目:
我目前有以下代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options=Options()
driver=webdriver.Chrome(options=options)
#Directing to site
driver.get("https://www.amazon.co.uk");
#Searching and navigating to search page
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/span/form/div[3]/span[1]/span/input"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[2]/div[1]/input"))).send_keys("Nintendo Switch")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[3]/div/span/input"))).click()
#Locating item on page
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'Nintendo Switch (OLED Model)')]"))).click()
不过这里好像有误。重写它的正确方法是什么?
driver.findElement(By.id("Nintendo Switch (OLED Model)"))
是 Java 语法,您可能需要 Python 语法。
解决方案
打印正文有现货需要诱导WebDriverWait for the and you can use either of the following :
使用 XPATH 和 innerText:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Nintendo Switch (OLED Model)']")))
使用 XPATH 和 contains()
:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'Nintendo Switch (OLED Model)')]")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
大卫,
你的这行代码
#Locating item on page
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'Nintendo Switch (OLED Model)')]"))).click()
此处 xpath //span[contains(., 'Nintendo Switch (OLED Model)')]
在 HTML-DOM 中有 5 个条目。
如何验证?
检查步骤:
Press F12 in Chrome
-> 转到 element
部分 -> 执行 CTRL + F
-> 然后粘贴 xpath
,你会看到 1 of 5 entries
这就是您的代码无法正常工作的原因。 xpath
应在 HTML-DOM
中找到 unique
条目。如果它有多个条目,它将始终 select 第一个节点。
因此,将您的 xpath 更改为 //a//span[contains(., 'Nintendo Switch (OLED Model)')]
应该将元素过滤为 1 of 3。现在该元素将获得点击 Nintendo Switch (OLED Model) - White
。
如果您打算选择 Nintendo Switch (OLED Model) - Neon Blue/Neon Red
然后使用这个 XPath
//a//span[contains(., 'Nintendo Switch (OLED Model)') and contains(text(),'Neon Blue/Neon Red')]
另一个网络元素也是如此。
希望这对您有所帮助。
我正试图通过中间的这段文字找到这个项目:
我目前有以下代码:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
options=Options()
driver=webdriver.Chrome(options=options)
#Directing to site
driver.get("https://www.amazon.co.uk");
#Searching and navigating to search page
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/span/form/div[3]/span[1]/span/input"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[2]/div[1]/input"))).send_keys("Nintendo Switch")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/header/div/div[1]/div[2]/div/form/div[3]/div/span/input"))).click()
#Locating item on page
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'Nintendo Switch (OLED Model)')]"))).click()
不过这里好像有误。重写它的正确方法是什么?
driver.findElement(By.id("Nintendo Switch (OLED Model)"))
是 Java 语法,您可能需要 Python 语法。
解决方案
打印正文有现货需要诱导WebDriverWait for the
使用 XPATH 和 innerText:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[text()='Nintendo Switch (OLED Model)']")))
使用 XPATH 和
contains()
:element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'Nintendo Switch (OLED Model)')]")))
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
大卫,
你的这行代码
#Locating item on page
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//span[contains(., 'Nintendo Switch (OLED Model)')]"))).click()
此处 xpath //span[contains(., 'Nintendo Switch (OLED Model)')]
在 HTML-DOM 中有 5 个条目。
如何验证?
检查步骤:
Press F12 in Chrome
-> 转到 element
部分 -> 执行 CTRL + F
-> 然后粘贴 xpath
,你会看到 1 of 5 entries
这就是您的代码无法正常工作的原因。 xpath
应在 HTML-DOM
中找到 unique
条目。如果它有多个条目,它将始终 select 第一个节点。
因此,将您的 xpath 更改为 //a//span[contains(., 'Nintendo Switch (OLED Model)')]
应该将元素过滤为 1 of 3。现在该元素将获得点击 Nintendo Switch (OLED Model) - White
。
如果您打算选择 Nintendo Switch (OLED Model) - Neon Blue/Neon Red
然后使用这个 XPath
//a//span[contains(., 'Nintendo Switch (OLED Model)') and contains(text(),'Neon Blue/Neon Red')]
另一个网络元素也是如此。
希望这对您有所帮助。