【问题标题】:Webscraping with Selenium and Python使用 Selenium 和 Python 进行网页抓取
【发布时间】:2020-11-28 08:20:27
【问题描述】:

我是编码的初学者,并尝试学习使用 selenium 进行网页抓取,我一直在从事一个项目,用字典检查破解每个单词的密码需要多长时间。 所以我的代码读取了一个每行都有一个单词的 .txt 文件,然后将其写入栏,它会复制破解它需要多长时间。 问题是我无法捕获网页的部分html代码,我需要帮助。

这是我的代码

# This program run spanish dictionary and check how secure password there are

import random
import time
from selenium import webdriver

#Paste here Chromedriver path
CHROMEDRIVERPATH = "C:\Program Files (x86)\chromedriver.exe"
#Paste here dictionary path in .txt format
dictionary = readFile("spanish_dictionary.txt")
date = str(time.strftime("%Y-%m-%dT%H-%M-%S"))

#read files
driver = webdriver.Chrome(CHROMEDRIVERPATH)

#webpage target
driver.get("https://www.security.org/how-secure-is-my-password/")
time.sleep(2)

#Label
writeFile("results_" + date + ".txt","word,time \n")
#File Content
for word in dictionary:
    bar = driver.find_element_by_id('password')
    bar.send_keys(word)
    bar.clear()
    timeToCrack = driver.find_element_by_xpath('//*[@id="hsimp"]/div[1]/div[3]/p[2]').get_attribute("class")
    result = word + "," + timeToCrack + "\n"
    writeFile("results_" + date + ".txt",result)
    time.sleep(random.uniform(0.4,1.0))

这是页面的html代码

<p class="result__text result__time">2 hundred microseconds</p>

我在输出文件中得到这个:

word,time 
a,result__text result__time
aba,result__text result__time
abaá,result__text result__time

我想要这个:

word,time 
a,6 hundred picoseconds
aba,4 hundred nanoseconds
abaá,5 milliseconds

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    你想要:

    timeToCrack = driver.find_element_by_xpath('//*[@id="hsimp"]/div[1]/div[3]/p[2]').text
    

    Java 等价物是:

    driver.findElement(By.xpath("//*[@id="hsimp"]/div[1]/div[3]/p[2]").getText();
    

    【讨论】:

      【解决方案2】:

      要提取和打印结果,您需要为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTORget_attribute()

        driver.get('https://www.security.org/how-secure-is-my-password/')
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#password"))).send_keys("lordkoda")
        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.result p.result__text.result__time"))).get_attribute("innerHTML"))
        
      • 使用XPATHtext属性:

        driver.get('https://www.security.org/how-secure-is-my-password/')
        WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='password']"))).send_keys("lordkoda")
        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='result']//p[@class='result__text result__time']"))).text)
        
      • 控制台输出:

        5 seconds
        
      • 注意:您必须添加以下导入:

        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.common.by import By
        from selenium.webdriver.support import expected_conditions as EC
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 2018-07-20
        • 2020-03-13
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多