无法让我的刮板完成循环以耗尽所有关键字

时间:2018-07-15 11:35:03

标签: python python-3.x selenium selenium-webdriver web-scraping

我已经用python与硒结合编写了脚本,以从网页中获取一些信息。要获取内容,必须单击一些并填写输入框以产生结果。结果将显示在新选项卡中。因此,有必要切换到该特定窗口以解析信息。我的脚本可以非常高效地完成所有这些操作。

这是this one的后续帖子。

我面临的问题是我使用了很少的关键字来获取信息。当使用单个关键字时,driver.close()可以解决问题,但是我使用多个关键字,所以当我使用driver.close()时,没有更多的窗口可移动了。

问题:我如何才能使刮板关闭new tab(当刮板从那里获取信息时)并循环回到主窗口以循环执行此过程,直到没有更多要检查的关键字了?

到目前为止,这是我的脚本:

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

link = "https://officialrecords.broward.org/AcclaimWeb/search/SearchTypeName"

def get_information(driver,url):
    for keyword in ['HMC DESIGN GROUP','HMC DESIGN GROUP']:
        driver.get(url)
        current = driver.current_window_handle
        wait.until(EC.element_to_be_clickable((By.ID, "btnButton"))).click()
        wait.until(EC.presence_of_element_located((By.ID,"SearchOnName"))).send_keys(keyword)
        wait.until(EC.presence_of_element_located((By.ID, "btnSearch"))).click()
        wait.until(EC.element_to_be_clickable((By.XPATH, "//td[contains(., 'HMC DESIGN GROUP')]"))).click()
        wait.until(EC.new_window_is_opened)
        driver.switch_to.window([window for window in driver.window_handles if window != current][0])
        for items in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,".listDocDetails"))):
            print(items.text)
        # driver.switch_to.default_content()
        # driver.close()

if __name__ == "__main__":
    driver = webdriver.Chrome()
    wait = WebDriverWait(driver,10)
    try:
        get_information(driver,link)
    finally:
        driver.quit()

1 个答案:

答案 0 :(得分:1)

尝试实施以下解决方案:

  @HostListener('document:click', ['$event.target'])
  onClickCalled(target) {   
    if (target.id == "searText") {
      this.showDropDown = true;
    }
    else {
      this.showDropDown = false;
    }
  }


  @HostListener("keyup", ['$event'])
  onKeyUp(ev) {  
    var str: string;
    if (ev.target.id == "searText") {
      str = ev.target.value;
      console.log(str);
    }
  }