从aria标签selenium网络驱动程序(python)中提取文本



现在我正在开发一个程序,该程序接受用户输入的问题和答案,将它们分为单独的q和a列表,然后自动回答给定的问题或答案。由于使用"机器人"的地方是在线的,我使用的是Selenium web驱动程序,这在尝试读取aria标签时给我带来了一些问题。我不知道我做错了什么,因为我对selenium、HTML或CSS一点都不了解。我试图在不知道是什么的情况下找到每个容器的aria标签值

我试图获取的HTML文本值的示例:

<div class="MatchModeQuestionGridBoard-tile"><div class="MatchModeQuestionGridTile" touch-action="auto"><div class="MatchModeQuestionGridTile-content"><div aria-label="to cloak; to conceal the truth; to offer lame excuses" class="FormattedText notranslate TermText MatchModeQuestionGridTile-text lang-en" style="font-size: 14px;"><div style="display: block;">to cloak; to conceal the truth; to offer lame excuses</div></div></div></div></div>

我的代码片段:

def driver():
driver = webdriver.Chrome()
driver.get(link)
startMatch = driver.find_element_by_xpath("/html/body/div[5]/div/div/div/div[2]/button").click()

#find text in matches
container = driver.find_elements_by_class_name('MatchModeQuestionGridTile-content')
containerFile = open("QuizletTerms.txt", "w+")
for _ in list(container):
arialabel = driver.find_elements_by_css_selector("div[aria-label='']")
containerFile.write("n")
containerFile.write(str(arialabel))
print(arialabel)
containerFile.close()
print("done")
sleep(5)

输出:


[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]

要伪装的文本,例如;隐瞒真相;提供蹩脚的借口既存在于子<div>中,也存在于其父<div>中。因此,提取它需要诱导WebDriverWait等待visibility_of_all_elements_located(),您可以使用以下定位器策略之一:

  • 使用CSS_SELECTORget_attribute():

    print([my_elem.get_attribute("aria-label") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "div.MatchModeQuestionGridTile-content>div[aria-label]")))])
    
  • 使用XPATHget_attribute():

    print([my_elem.get_attribute("aria-label") for my_elem in WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//div[@class='MatchModeQuestionGridTile-content']/div[@aria-label]")))])
    
  • 注意:您必须添加以下导入:

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

最新更新