divとclassについて
HTMLのdiv classとは?5分でわかる事例付き解説|Udemy メディア
divはタグをグループ化するもの。
classは、その名前。
idもdivにつける名前だが、違いは以下。
classは1ページ内で同一名を複数記述可能、idは一箇所のみ。
HTMLのdiv classとは?5分でわかる事例付き解説|Udemy メディア
divはタグをグループ化するもの。
classは、その名前。
idもdivにつける名前だが、違いは以下。
classは1ページ内で同一名を複数記述可能、idは一箇所のみ。
Pythonでかんたんスクレイピング (JavaScript・Proxy・Cookie対応版) - Qiita
Requestモジュール
Developer Interface — Requests 2.21.0 documentation
BeautifulSoup
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
パーサではない。パーサー指定しパート毎に取り出すためのライブラリ。
上記の"ハイプ・サイクルは〜"部分を取り出す場合、以下2つの方法あり。
soup.find("div", attrs={"class": "leftarea"}).text) soup.find_all(attrs={"class": "leftarea"})[0].text
findでタグ指定し、属性で絞り込み。
find_allでタグ指定せず、属性で絞り込み。レスポンスはリスト。
Python + Selenium で Chrome の自動操作を一通り - Qiita
SeleniumでChromeDriverを使ってスクレイピング | fukuの犬小屋
Selenium使ってみた(Python) - コンピュータサイエンス系勉強ノート
PythonでSeleniumを使ってスクレイピング (基礎) - Qiita
【Python】seleniumで取得した要素をクリックできないときの対処法 - 備忘録
【Python】 実践 Selenium 【前編】 - Qiita
以下URLからchromedriverをダウンロードし、/usr/loca/binに設置する必要あり。
Downloads - ChromeDriver - WebDriver for Chrome
Javascript実行する必要があるやつ
けっこうはまった。。。先人に感謝!
from selenium import webdriver from selenium.webdriver.common.by import By import time from bs4 import BeautifulSoup def scraping(url): options = webdriver.ChromeOptions() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.get(url) driver.execute_script("return(bpsso.liMov(0))") a = driver.page_source.encode('utf-8') print(a) soup = BeautifulSoup(a, "lxml") print(soup.text) driver.quit() if __name__ == '__main__': url = 'https://tech.nikkeibp.co.jp/top/it/' scraping(url)
【スクレイピングと法律】スクレイピングって法律的に何がOKで何がOUTなのかを弁護士が解説。 | IT法務や仮想通貨、ICO、AIの法律に詳しい弁護士|中野秀俊
利用規約でスクレイピングNGでない & データを丸々譲渡しなければ法的にOK
Amazon CAPTCHA
昔買った本で勉強
JavaScriptが扱うオブジェクトは4つあり。
<html> <head> <title>Test</title> </head> <body> <script type="text/javascript"> function hoge() { this.height = 100; this.width = 200; } var myobj = new hoge(); alert(myobj.height); hoge.prototype.depth = 300; alert(myobj.depth); hoge.prototype.width = 400; alert(myobj.width); </script> </body> </html>
<html> <head> <title>Test</title> <script type="text/javascript"> function hoge() { document.getElementById("fuga").style.backgroundColor = "#AAA"; } </script> </head> <body onClick="hoge()"> <h1 id="fuga">honya</h1> </body> </html>
実行するとCORSエラーになる。(Google Chrome Developer Toolエラー)
Access to XMLHttpRequest at 'http://dicom.nema.org/medical/dicom/current/source/docbook/part01/part01.xml' from origin 'http://localhost:63342' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
FireFoxの"CORS Anywhere"拡張プラグインで表示可能。
<html> <head> <title>Test</title> <script src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.2.0/prototype.js" type="text/javascript"></script> <script type="text/javascript"> function hoge(uri) { target = "disp"; new Ajax.Updater(target, uri, {method: "get"}); } </script> <style type="text/css"> #disp{border: 1px solid #aaa;width: 250px; height: 250px; padding: 5px;} </style> </head> <body> <form> <input type="button" id="btn01" name="btn01" value="No.1" onClick="hoge('http://dicom.nema.org/medical/dicom/current/source/docbook/part01/part01.xml')"> <input type="button" id="btn02" name="btn02" value="No.2" onClick="hoge('http://dicom.nema.org/medical/dicom/current/source/docbook/part02/part02.xml')"> </form> <div id="disp"></div> </body> </html>
<html> <head> <title>Test</title> <script type="text/javascript"> var myJSON = {apple:"APPLE", banana:"BANANA"} </script> </head> <body> <form> <input type="button" value="hoge" onClick="alert(myJSON.apple);"> </form> </body> </html>
Macの場合、CMD+Option+iキーで起動
Elementsタブの一番左のアイコンをクリックすると、ページの任意の場所でダブルクリックすると、該当ソース部分が分かる。
いつまでたっても覚えない。メモしよう
攻撃者のサイトのURL
http://cracker/index.html
index.htmlの内容
ターゲットサイト
http://target/
入力データの情報を、そのままブラウザに返してしまう。
例) 存在しないコンテンツa.htmlにアクセスがあった場合に、"a.htmlは存在しません"エラーを返す等(a.htmlは入力データで、エラーメッセージに利用してる)
1. 騙される人が攻撃者のサイトにアクセス
2. リンクをクリック
3. ターゲットサイトに、
は存在しない。
ターゲットサイトがブラウザに、"ファイル名(スクリプト部分)は存在しません"的なエラーメッセージを返す。
このファイル名部分が、スクリプトのため、ブラウザで実行されてしまう。
ターゲットサイトがユーザーからの入力情報をレスポンスデータとして出力する場合に影響あり。
ただ、これ自体は悪ではない。
スクリプト文字列が含まれてるのに、そのまま返すのが問題。
出力しないよう入力チェックしてないのが問題。
クエリ文字列にスクリプトを含めるのも可能。
上記サイト非常に良い!
攻撃説明コードつき!
反射型クロスサイトスクリプティング(Reflected XSS)
→このページで説明した内容
格納型クロスサイトスクリプティング(Stored XSS)
→登録した内容がDBに格納され、何かしらの操作で、ユーザーに表示されるwebサイトが対象
登録時の入力値チェック、表示時のサニタイズに不備があり発生。
攻撃者は登録しておけばいいだけ。
DOM Based XSS
→javaスクリプト自体の不具合を悪用。スクリプトがブラウザに出力する機能の不具合を悪用し、悪意のある別のスクリプトを出力し、ブラウザに実行させる。
おそらく、元のスクリプトが引数を受け付けるのが前提で、不正な引数つきのリンクを何かしらの方法で実行させる。