首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从“产品概览”菜单的子页面获取文本

从“产品概览”菜单的子页面获取文本
EN

Stack Overflow用户
提问于 2019-10-23 07:58:56
回答 2查看 179关注 0票数 1

我正在尝试使用selenium来抓取一些数据。我可以让想要的页面加载并打开子页面,但是不能让selenium驱动程序从子菜单中找到xpath。

我尝试使用selenium驱动程序单击该子页面,但我在获得selenium使用xpath时再次遇到问题。

代码语言:javascript
复制
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)

我想从子页面获取文本,然后关闭它,然后继续打开并从所有子页面获取信息。

首先,我只需要能够从第一个菜单中获得信息。例如,红色圆圈中的文本

这方面的一个例子是提供服务的公司的名称。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-23 09:53:40

第一件重要的事情是用定位器中的最佳实践重构代码。您可以找到信息这里这里

第二,使用WebDriverWait而不是sleep

下面是在打开的模式窗口中选择某些元素的代码:

代码语言:javascript
复制
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()
票数 1
EN

Stack Overflow用户

发布于 2019-10-23 09:08:41

我可以从开发工具中访问子窗口上的按钮名"Shift to this product“。您可以提供一个相对的xpath,如//button@id='btnSwitchToProduct‘或do find by id('btnSwitchToProduct')。

您已经给出了元素的整个路径,该元素延迟了测试脚本的执行。建议您始终使用“id”或“name”,因为它是页的唯一值,并加快测试脚本的运行速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58518165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档