【问题标题】:Scraping Cart items for price in python在 python 中抓取购物车项目的价格
【发布时间】:2018-06-06 02:16:21
【问题描述】:

我正在尝试抓取购物车商品并获取购物网站的相应价格。

到目前为止,这是我的代码,但出现错误。我想我没有得到正确的 XPath

from  selenium import webdriver
chrome_path =r"C:\Users\aq4'july\Desktop\chromedriver.exe"
driver = webdriver.Chrome()
driver.get("https://www.myntra.com/")

#User Login
driver.find_element_by_xpath("""//*[@id="desktop-header-cnt"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/a[2]""")

我得到的错误是

Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    driver.find_element_by_xpath("""//*[@id="desktop-header-cnt"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/a[2]""").click()
  File "C:\Users\aq4'july\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
    self._execute(Command.CLICK_ELEMENT)
  File "C:\Users\aq4'july\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\webelement.py", line 501, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\aq4'july\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\webdriver.py", line 311, in execute
    self.error_handler.check_response(response)
  File "C:\Users\aq4'july\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotVisibleException: Message: element not visible
  (Session info: chrome=63.0.3239.84)
  (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Windows NT 10.0.15063 x86_64)

请随时分别使用用户名和密码(sarwarhayatt@outlook.com、sunset@paris)进行测试。

注意:我使用的是 python 3.6,请强调我在提问时遗漏了任何内容。

【问题讨论】:

  • 表达式看起来不错,应该匹配元素。你遇到了什么错误?你试过用Explicit Wait 等待吗?
  • No.. 你能否尝试进一步扩展此代码我不知道如何列出购物车项目
  • 总是把完整的错误信息(Traceback)放在有问题的地方(作为文本,而不是屏幕截图)。还有其他有用的信息。
  • 我在 https://www.myntra.com 页面上看不到购物车商品,而只在 https://www.myntra.com/checkout/cart 上看到。也许创建我们可以运行的最小工作示例。
  • @furas Done.Added 几个项目到购物车。

标签: python selenium selenium-webdriver beautifulsoup


【解决方案1】:

登录后可以直接进入购物车

driver.get('https://www.myntra.com/checkout/cart')

或者你可以点击“包”按钮

item = driver.find_element_by_css_selector('.desktop-cart')
item.click()

Firefox()测试的完整代码

编辑: 有时登录有问题,但似乎sleep() 解决了这个问题。

from selenium import webdriver
import time

LOGIN = 'xxx@xxx.com' 
PASSWORD = 'PaSwOrD'

# --- start ---

chrome_path =r"C:\Users\aq4'july\Desktop\chromedriver.exe"
driver = webdriver.Chrome()

#driver = webdriver.Firefox()

# resize window so all elements are visible 
# and the is no problem to click them 
driver.maximize_window()
#driver.set_window_size(1920, 1080)
#driver.execute_script("window.resizeTo(1920,1080)") # doesn't work for me

# --- main page ---

#driver.get("https://www.myntra.com/")

# --- login ---

driver.get('https://www.myntra.com/login?referer=https://www.myntra.com/')

time.sleep(1)

item = driver.find_element_by_css_selector('.login-user-input-email')
item.send_keys(LOGIN)

item = driver.find_element_by_css_selector('.login-user-input-password')
item.send_keys(PASSWORD)

item = driver.find_element_by_css_selector('.login-login-button')
item.click()

time.sleep(1)

# --- main page ---

#driver.get("https://www.myntra.com/")

# --- cart ---

item = driver.find_element_by_css_selector('.desktop-cart')
item.click()

# or

#driver.get('https://www.myntra.com/checkout/cart')

调整大小:How do I resize the window in Chrome and Firefox when testing with Selenium?

滚动:How can I scroll a web page using selenium webdriver in python?

【讨论】:

  • 只是想问你..相同的代码是否也可以在 chrome 上运行。如果我们改变driver = webdriver.Chrome
  • 它也应该在 Chrome 上工作 - 我在 Selenium 中没有 Chrome 驱动程序。
  • 我安装了新的 Chrome 驱动程序并且它可以工作(在 Linux Mint 上)但是在我的计算机上它会打开带有窄窗口的 Chrome,所以 bag 图标是不可见的,所以 click 不起作用。代码应该滚动窗口或调整窗口大小。但是使用 driver.get() 我可以使用购物车获取页面
  • 您可以在答案中添加调整窗口大小的代码吗?
  • 现在我正在寻找调整大小的解决方案:)
【解决方案2】:

兄弟,如果您想登录,请转到登录页面 并做事.... 计算双引号”和转义序列

from  selenium import webdriver
import time
chrome_path ="chromedriver.exe"
driver = webdriver.Chrome()
driver.get("https://www.myntra.com/login")

time.sleep(2)
driver.find_element_by_xpath("//*[@id=\"mountRoot\"]/div/div/div/form/fieldset[1]/div[1]/input").send_keys("sarwarhayatt@outlook.com")

driver.find_element_by_xpath("//*[@id=\"mountRoot\"]/div/div/div/form/fieldset[1]/div[2]/input").send_keys("sunset@paris")
driver.find_element_by_xpath("//*[@id=\"mountRoot\"]/div/div/div/form/fieldset[2]/button").click()

time.sleep(2)

driver.find_element_by_xpath("//*[@id=\"desktop-header-cnt\"]/div[2]/div[2]/a").click()
time.sleep(2)
print (driver.find_element_by_xpath("//*[@id=\"prod-item-1514127198\"]/div[2]/div[4]/div/div").text)

time.sleep(10)
driver.quit()

您的错误就在这里: 3个双引号和“desktop-header-cnt”双引号破坏了完整的字符串 driver.find_element_by_xpath("""//*[@id="desktop-header-cnt"]/div[2]/div[2]/div/div[2]/div[2]/div[2]/一个[2]""")

【讨论】:

  • 很好@zxcV32 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
相关资源
最近更新 更多