はじめに
seleniumで困ったことと対応策の備忘録
chromeを閉じないでそのまま出しておきたい
seleniumが終了した際、chromeが閉じないようにするには、以下のオプションを指定する
chrome_options = Options()
#実行時にchromeが閉じないように設定する
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(options=chrome_options)
formのボタンに書いてあるテキストを判断してクリックさせたい
buttonが複数あり、それぞれにvalue属性でテキストが設定されている場合、valueの内容を指定してクリックできる
#複数有る場合、value=申し込み など同じテキストで設定されている場合がある。その場合はあまり意味がない
driver.find_element(By.CSS_SELECTOR,'[value="テキスト"]').click()
リンクのテキストでクリックさせたい
aタグで挟まれているテキストを判断してクリックさせたい時に使う
#hrefの内容では判断できない
driver.find_element(By.LINK_TEXT,'テキスト').click()
スクリプトを実行させたい
実際とあるサイトでの対応策。aタグで挟まれている文字が同じで、hrefに設定されているスクリプトで判断するしかないケース。
対応した方法としては、ビューティフルスープにて調べたいaタグ郡のhrefを解析かつ検索を行い、クリックしたい箇所のスクリプト内容を取得する。続いて、seleniumで取得したスクリプトを走らせることでクリックさせる。
#該当するリンクのhrefをbs4で取得し、seleniumを使用してスクリプトを走らせる
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
tables = soup.find('table', class_='hoge')
links = tables.find_all('a',attrs={'href': re.compile(kensaku_moji) })
for link in links:
hrefs = link.get('href')
driver.execute_script(hrefs)