2024年6月4日火曜日
2023年11月21日火曜日
ウェブスクレイピング (selenium - requests)
# ウェブスクレイピング
# python + selenimu + webDriver + BeautifulSoup
#
#python 3.8+
#
#conda install -c conda-forge selenium==4.15.1
# → https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/
#conda install -c anaconda beautifulsoup4==4.9.1
import sys
import time
import datetime
import traceback
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import requests as rq
import ssl, urllib3
##################################################
class CustomHttpAdapter (rq.adapters.HTTPAdapter):
def __init__(self, ssl_context=None, **kwargs):
self.ssl_context = ssl_context
super().__init__(**kwargs)
def init_poolmanager(self, connections, maxsize, block=False):
self.poolmanager = urllib3.poolmanager.PoolManager(
num_pools=connections
,maxsize=maxsize
,block=block
,ssl_context=self.ssl_context)
##################################################
def login_post():
# open web browser
print('open web browser')
options = webdriver.EdgeOptions()
options.add_argument("headless")
options.add_argument('log-level=3') # INFO = 0, WARNING = 1, LOG_ERROR = 2, LOG_FATAL = 3.
service = webdriver.EdgeService(executable_path='./msedgedriver.exe', service_args=['--log-level=SEVERE'])
driver = webdriver.Edge(service=service, options = options)
driver.set_window_size('1200', '1000')
# login
print ('login')
driver.get('url')
time.sleep(1)
print (driver.current_url)
driver.find_element(By.ID, 'user-name').send_keys('id')
driver.find_element(By.ID, 'password').send_keys('pass')
driver.find_element(By.ID, 'login').click()
time.sleep(2)
with rq.Session() as s:
ctx = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
ctx.options |= 0x4
s.mount('https://', CustomHttpAdapter(ctx))
for cookies in driver.get_cookies(): # cookiejar
s.cookies.set(cookies["name"], cookies["value"], **{"domain":cookies["domain"] ,"path":cookies["path"]})
st = s.post('url',data=data)
print (st.text)
# close web browser
print ('close web browser')
driver.close()
driver.quit()
2023年11月9日木曜日
Generic.List ソート
Dim ary As Generic.List(Of Integer) ary.Sort() ' 正順(昇順)でソート default ary.Sort(Function(x, y) y.CompareTo(x)) ' 逆順(降順)でソート
2022年10月13日木曜日
2022年9月30日金曜日
flask - jinja におけるテンプレート差込みの考え方
return render_template(page1.html)
1. page1.html が呼出されると
2. extends 指定に基づいて base.html を読込み
3. base.html 内の block に同じ名前の block を差込む
4. その結果を返す
2022年5月18日水曜日
カンマ区切りの文字列作成
val sb = mutableListOf<String>()Java8 以上
sb.add("val1")
sb.add("val2")
sb.add("val3")
sb.add("val4")
sb.add("val5")
val sz = sb.joinToString(",")
2021年7月5日月曜日
win32 C++ でWMI(Windows Management Instrumentation)を使用する
以下は指定IP(szIPaddr)に ping を打った時の status を取得する
// 主スレッドで呼出し
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
CoInitializeSecurity(NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_DEFAULT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0);
// Ping status
HRESULT hr;
CComPtr< IWbemLocator > pLocator;
hr = CoCreateInstance(CLSID_WbemAdministrativeLocator, NULL, CLSCTX_INPROC_SERVER, IID_IWbemLocator, (void**)(&pLocator));
if (SUCCEEDED(hr))
{
CComPtr< IWbemServices > pService;
//hr = pLocator->ConnectServer(L"root\\cimv2", NULL, NULL, NULL, WBEM_FLAG_CONNECT_USE_MAX_WAIT, NULL, NULL, &pService);
hr = pLocator->ConnectServer(L"root\\cimv2", NULL, NULL, NULL, 0, NULL, NULL, &pService);
if (SUCCEEDED(hr))
{
CString szSQL;
szSQL.Format(_T("SELECT * FROM Win32_PingStatus WHERE Address='%s'"), szIPaddr);
_bstr_t bzSQL(_bstr_t(CT2W((LPCTSTR)szSQL)));
CComPtr< IEnumWbemClassObject > pEnumObj;
hr = pService->ExecQuery(L"WQL", bzSQL, (WBEM_FLAG_RETURN_IMMEDIATELY|WBEM_FLAG_FORWARD_ONLY), NULL, &pEnumObj);
if (SUCCEEDED(hr))
{
CComPtr< IWbemClassObject > pObj;
ULONG uReturned;
//hr = pEnumObj->Reset();
hr = pEnumObj->Next(WBEM_INFINITE, 1, &pObj, &uReturned);
if (!FAILED(hr))
{
_variant_t vtBuf;
hr = pObj->Get(L"StatusCode", 0, &vtBuf, 0, 0);
pObj.Release();
}
pEnumObj.Release();
}
pService.Release();
}
pLocator.Release();
}
登録:
コメント (Atom)