我正在尝试使用selenium来抓取一些数据。我可以让想要的页面加载并打开子页面,但是不能让selenium驱动程序从子菜单中找到xpath。
我尝试使用selenium驱动程序单击该子页面,但我在获得selenium使用xpath时再次遇到问题。
path = r"C:\Program Files\chromedriver_win32\chromedriver.exe"
driver = webdriver.Chrome(path)
#opening website
driver.get("http://elpris.dk")
time.sleep(2)
#setting zipcode to 2200 Nørrebro
driver.find_element_by_xpath("""//*[@id="zip"]""").click()
driver.find_element_by_xpath("""//*[@id="zip"]""").send_keys("2200")
#selecting the dropdown menu
driver.find_element_by_xpath("""//*[@id="btnSelectProfile"]""").click()
#selecting hus 4000 kwh
driver.find_element_by_xpath("""//*[@id="home"]/div[1]/div/div/form/div/ul/li[4]/span/a""").click()
#clicking on "Find Priser"
driver.find_element_by_xpath("""//*[@id="btnSubmitSearch"]""").click()
time.sleep(2)
#scrolling down to get all the table rows to make sure the full product page is loaded
i = 0
while i < 50:
driver.find_element_by_xpath("""/html/body""").send_keys(Keys.END)
i += 1
time.sleep(2)
#counting number of rows
rows = len(driver.find_elements_by_xpath("""//*[@id="results"]/div[2]/div[2]/div/div[2]/div/div/table/tbody/tr"""))
#counting number of col
cols = len(driver.find_elements_by_xpath("""//*[@id="results"]/div[2]/div[2]/div/div[2]/div/div/table/tbody/tr[1]/td"""))
print (rows)
print (cols)
#scroll up
driver.find_element_by_xpath("""/html/body""").send_keys(Keys.HOME)
time.sleep(2)
#entering each indivudual row and getting info
driver.find_element_by_xpath("""//*[@id="results"]/div[2]/div[2]/div/div[2]/div/div/table/tbody/tr[1]//*[@id="btnSeeMore"]""").click()
time.sleep(2)
abonnement = driver.find_element_by_xpath("""/html/body/div[6]/div/div/div/accordion/div/div[2]/div[2]/div/div/div/div[1]/span[3]/div[1]/span[2]""").text()
print(abonnement)我想从子页面获取文本,然后关闭它,然后继续打开并从所有子页面获取信息。

首先,我只需要能够从第一个菜单中获得信息。例如,红色圆圈中的文本
这方面的一个例子是提供服务的公司的名称。
发布于 2019-10-23 09:53:40
第一件重要的事情是用定位器中的最佳实践重构代码。您可以找到信息这里和这里。
第二,使用WebDriverWait而不是sleep。
下面是在打开的模式窗口中选择某些元素的代码:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
# you code to click on **SE MERE**
main_details = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".productDetails .main-details p"))).text
price = driver.find_element_by_css_selector(".productDetails .price").text
subscription_monthly_payment = driver.find_element_by_css_selector(".productDetails .contractInfo [tooltip-checker='subscriptionMonthlyPayment'] + .value").text
driver.find_element_by_css_selector(".productDetails .close").click()发布于 2019-10-23 09:08:41
我可以从开发工具中访问子窗口上的按钮名"Shift to this product“。您可以提供一个相对的xpath,如//button@id='btnSwitchToProduct‘或do find by id('btnSwitchToProduct')。
您已经给出了元素的整个路径,该元素延迟了测试脚本的执行。建议您始终使用“id”或“name”,因为它是页的唯一值,并加快测试脚本的运行速度。
https://stackoverflow.com/questions/58518165
复制相似问题