TDnet? 強いよね…右クリック禁止,jsでHTML組み立て、iframeつかいまくり、button要素でクリック阻止とすきがないね。でも俺は負けないよ。どm、DOMたちが躍動する俺のseleniumを皆さんに見せたいね
というわけで 東証のサービスをスクレイピングしたい案件が発生したのだけど、あのサイトあれだった。一応個人でRSS化しているヒトはいたのだけど、今回は色々あって自分で頑張ってみた。
- input要素ではなくbutton要素でクリックしてsubmitする感じになっていたのでsend_keys(Keys.RETURN)
- iframeの内部には普通にはアクセス出来ないのでswitch_to_frameで移動する必要がある
コードを一部抜粋
def access(self, code): url = "https://www.release.tdnet.info/index.html" self.driver.get(url) iframe = self.driver.find_element_by_tag_name("iframe") self.driver.switch_to_frame(iframe) self.driver.find_element_by_name("q").send_keys("{}0".format(code)) self.driver.find_element_by_name("q").send_keys(Keys.RETURN) time.sleep(2) results = [] try: result_frame = self.driver.find_element_by_name("mainlist") self.driver.switch_to_frame(result_frame) main_table = self.driver.find_element_by_id("maintable") for tr in main_table.find_elements_by_tag_name("tr"): company_name = tr.find_element_by_class_name("companyname").text published = tr.find_element_by_class_name("time").text t = tr.find_element_by_class_name("title") title = t.find_element_by_tag_name("a").text url = t.find_element_by_tag_name("a").get_attribute("href") results.append({"company_name": company_name, "published": published, "title": title, "url": url}) return results except WebDriverException: logging.debug("{} not found".format(code)) return results