Autoitでブログ記事のランク順位を調べられるか

Autoitでランク調べる

Autoit+SeleniumBasicでGoogleを検索語付きで検索し、自分のURLが何番目に表示されるかを調べたいと思います。ブログがGoogle検索で何位?

AutoitはBasic言語に似た文法で初心者にもわかりやすいと思います。

本家ダウンロード先:Home – AutoIt

:_Autoitの入門記事

最初にしなければいけないこと

Googleの検索で表示される数を100個に変更し、いっぺんに調べようかと思いますしたがうまくゆきませんでした。

Seleniumで立ち上がるChrome違う?ログインしてるのに立ち上がるChromeはログインしていない。なので100の設定が反映されません。

下にあるページボタンを押さないとダメみたいです。

google検索

Seleniumで動かすブラウザの内容と普通にブラウザで検索した結果は違うようです。

ChromeDriverは常に、最新のものを使わないとエラーになる

chromeDriverエラー

Google Chromeのブラウザ更新したら、必ず動くかどうかチェックしてください。

動かないときは、ChromeブラウザのVersionをチェックし、合うDriverを入れてください。

URLのオプション 検索語と日本語のみ

$url = “https://www.google.com/search?q=” & $searchword & “&lr=lang_ja”

“&lr=lang_ja” =の前後に空白スペースは入れないこと

対称HTMLでたまに、不規則なものがある

Xpathで指定しても、それがない時がある。エラー処理が必要。スキップするようにしないとダメ

情報取得のタグ・Class・XPath選ぶのを迷います。常にあるものを探すのが大変

いままで考えたコード

#include <Array.au3>

;Chrome 別のWindowで開く0
Local $myweb = "take-web"
Local $i = 0, $k = 3, $yn = 0, $cnt, $rank = 0

Local $drive = ObjCreate("selenium.ChromeDriver")
Local $searchword  = inputBox("","","autohotkey")
Local $url = "https://www.google.com/search?q=" & $searchword & "&lr=lang_ja"
$drive.Get($url) ;// URLを開く


;Local $getText = $drive.FindElementByXPath('//*[@id="rso"]/div/div[1]/div/div/div[1]/a').Text()
;// ""は' 'で囲む   .Text() テキスト取得

;Local $yn = StringInStr($getText, $myweb)

While $k <= 10
	$cnt = $drive.FindElementsByClass('yuRUbf').Count
	;// 複数あるもの Elements s必要 数はCountで取得
	;MsgBox("","",$cnt,2)
	$i = 0

	While $yn = 0
		$i = $i + 1
		;$getText = $drive.FindElementByXPath('//*[@id="rso"]/div/div[' & $i & ']/div/div/div[1]/a/div/cite').Text()
		;$getText = $drive.FindElementByXPath('//*[@id="rso"]/div/div[' & $i & ']/div/div/div[1]/a').attribute("href")
		
		Local $getText = $drive.FindElementByXPath('(//div[@class="yuRUbf"])[' & $i & ']/a').attribute("href")
		'// class名を複数のところで使っている時 (div[class="~~"])[i]/a  i +1 配列のように使う
		
		
		$yn = StringInStr($getText, $myweb)
		MsgBox("","",$getText,2)

		If $yn <> 0 Then
			$rank = + $i
			MsgBox("","",$rank & " 位")
			Exit
		EndIf
		If $i = $cnt Then
			ExitLoop
		EndIf
	WEnd

	MsgBox("","",($k-1) & " page",2)
	$drive.FindElementByXPath('//*[@id="xjs"]/table/tbody/tr/td[' & $k & ']/a').Click
	;$drive.FindElementByXPath('//*[@id="xjs"]/table/tbody/tr/td[3]/a').Click()
	$k = $k +1
	$rank = + $i
WEnd	



MsgBox("","",$i) ;// ないと消えてしまう

コメント

タイトルとURLをコピーしました