每当我通过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)
答案 0 :(得分:0)
您应该在implicitly_wait
之后设置browser = webdriver.Firefox()
因为当您在shell中运行时,页面将有时间完全加载,当您像模块一样运行它时,您不会等待页面加载所以它应该是:
browser = webdriver.Firefox()
browser.implicitly_wait(10)
在抛出异常之前,这将等待最多10秒钟才能找到该元素。
替代方案是:
browser.explicitly_wait(10)
将等待10秒,然后它将搜索元素
或
sleep(5)
单击按钮后搜索元素之前。您可以调整秒数以查看哪种适合。并且不要忘记从sleep
模块导入time
:from 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)
如果这回答你的问题,请告诉我。