python:selenium webscraping脚本无法通过模块工作

时间:2017-07-06 13:37:06

标签: python selenium

每当我通过shell运行以下脚本时它的工作原理,但无论何时我通过python模块或pycharm运行相同的脚本它都不起作用,它不会获取数据。有人可以帮忙吗?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
browser = webdriver.Firefox()
site = browser.get("https://www.flipkart.com/")
searchInput = browser.find_element_by_class_name("LM6RPg")
searchInput.send_keys('Laptop')
searchInput.send_keys(Keys.ENTER)
titleResults = browser.find_elements_by_xpath("//div[@class='_3wU53n']")
for title in titleResults:
    print(title.text)

2 个答案:

答案 0 :(得分:0)

您应该在implicitly_wait之后设置browser = webdriver.Firefox()因为当您在shell中运行时,页面将有时间完全加载,当您像模块一样运行它时,您不会等待页面加载所以它应该是:

browser = webdriver.Firefox()
browser.implicitly_wait(10)

在抛出异常之前,这将等待最多10秒钟才能找到该元素。

替代方案是:

browser.explicitly_wait(10)

将等待10秒,然后它将搜索元素

sleep(5)
单击按钮后搜索元素之前

。您可以调整秒数以查看哪种适合。并且不要忘记从sleep模块导入timefrom time import sleep

如果这有助于您,请告诉我。

答案 1 :(得分:0)

以下是您的问题的答案:

    from selenium import webdriver
    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait

    binary = FirefoxBinary('C:\\Program Files\\Mozilla Firefox\\firefox.exe')
    caps = DesiredCapabilities().FIREFOX
    caps["marionette"] = True
    browser = webdriver.Firefox(capabilities=caps, firefox_binary=binary, executable_path="C:\\Utility\\BrowserDrivers\\geckodriver.exe")

    site = browser.get("https://www.flipkart.com/")
    searchInput = browser.find_element_by_xpath("//input[@class='LM6RPg']")
    searchInput.send_keys('Laptop')
    searchInput.send_keys(Keys.ENTER)
    WebDriverWait(browser, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='container']//div[text()='Dell Inspiron Core i3 6th Gen - (4 GB/1 TB HDD/Windows 10 Home) 3467 Notebook']")))
    titleResults = browser.find_elements_by_xpath("//div[@class='_3wU53n']")
    for title in titleResults:
        print(title.text)

如果这回答你的问题,请告诉我。