lancersで早速仕事を受託してみたい!なんてこともあるかもしれませんが、如何せん案件が膨大にあるので、まずはコンパクトに「システム開発案件」で「python」を検索にかけて出てきた案件を取得してみることにします。
コンテンツ
環境
| Mac | 10.14 |
| python | 3.7 |
| Chrome | 77.0 |
前提条件
- selenium
- chromedriver インストール済み
- beautifulsoup4 インストール済み
お課
- lancersのシステム開発案件にアクセスする
- 「python」の検索条件を取得する
- ドロップダウンメニューを「新着順」に並び替える
先ずはサイトにアクセスすること
import timeimport chrome driver_binaryfrom selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.lancers.jp/work/search/system/websystem")time.sleep(5)search_box=driver.find_element_by_id("Keyword") search[Keywords] search_box.send_key("python") #検索ボックスを左記に入れます。
とりあえず、アクセス先のURLの検索ボックスにpythonを入れるところまできました。
アクセス先URLから「python」で検索をかける
import timeimport chromedriver_binaryfrom selenium import webdriverdriver = webdriver.Chrome()driver.get("https://www.lancers.jp/work/search/system/websystem")time.sleep(5)search_box=driver.find_element_by_id("Keyword") search[Keywords] search_box.send_key("python") #検索ボックスを左記に入れます。 driver.find_element_by_id(“Search”).click()
エラーメッセージが出現
# ⇨selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable(Session info: chrome=77.0.3865.75)
ブラウザ上ではこのid=SearchのButton要素を押すことで検索が実行されています。なのになぜか動きません。
ならばそもそもこの道は違う道なのではないかということに立ち返る必要があります。まずはLancersのサイトのHTMLを観察してみました。
検索の部分はフォームになっていないことに気づきました。
つまり、Searchボタンを押してもformにデータがsubmitされているわけではないということです。しかしブラウザ上ではButtonを押したら検索結果が表示される。
それはなぜか。
JavaScriptで検索を実行しているからでしょう。
私は専門ではないので詳しくはないのでよくわかりませんが、LancersのサイトはReactか何か知りませんが、SPAとして動作しているんだと思います。
それならばJavaScriptでclickを実行してみればいいのではないかという仮設を立ててみます。
import time
import chromedriver_binary
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.lancers.jp/work/search/system/websystem")
time.sleep(5)
search_box=driver.find_element_by_id("Keyword")
search_box.send_keys("python")
button = driver.find_element_by_id("Search")
driver.execute_script('arguments[0].click();', button)
time.sleep(5)
print(driver.page_source)
driver.close()
現在2019年9月16日ですが1,260件の案件が出てきました。

ドロップメニューダウンから「新着順」を選択する
まずは、chromeの検証をします。

classの名前が「p-search__sort-selectbox」という事がわかります。
import time
import chromedriver_binary
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.lancers.jp/work/search/system/websystem")
time.sleep(5)
search_box=driver.find_element_by_id("Keyword")
search_box.send_keys("python")
button = driver.find_element_by_id("Search")
driver.execute_script('arguments[0].click();', button)
time.sleep(5)
print(driver.page_source)
driver.close()
#以下新着順のソート
selectbox = driver.find_element_by_class_name("p-search__sort-selectbox)
selectbox.send_keys("新着順")
これで、全てのお題が解決できたことになります。




コメントを残す