반응형
NSString *str_script = @"";

str_script = [str_script stringByAppendingString:@"var html_string = '';"];

str_script = [str_script stringByAppendingString:@"html_string += '<div>';"];
str_script = [str_script stringByAppendingString:@"html_string += 'WebView 에 동적 HTML 에 추가';"];
str_script = [str_script stringByAppendingString:@"html_string += '</div>';"];

str_script = [str_script stringByAppendingString:@"document.body.insertAdjacentHTML('afterend', html_string);"];

[webView evaluateJavaScript:[NSString stringWithFormat:@"%@", str_script] completionHandler:^(NSString *result, NSError * _Nullable error) {
	NSLog(@"error : %@", error);
	NSLog(@"result : %@", result);
}];

 

내용은 안드로이드의 경우와 같아 아래 글을 참고하기 바란다.

 

2022.06.18 - [프로그래밍 관련 유용한 자료/안드로이드] - 안드로이드 웹뷰에 javascript 로 html 추가하기

 

반응형
반응형
String str_script = "";

str_script += "var html_string = '';";

str_script += "html_string += '<div>';";
str_script += "html_string += 'WebView 에 동적 HTML 에 추가';";
str_script += "html_string += '</div>';";

str_script += "document.body.insertAdjacentHTML('afterend', html_string);";

webView.loadUrl("javascript:" + str_script);

이 스크립트의 핵심은 document.body.insertAdjacentHTML('afterend', html_string) 이 부분이다.

 

Element.insertAdjacentHTML(position, html_text)

 

기준이 되는 Element 에 html_text 를 추가하는 것이다.

 

position 은 다음과 같이 4가지 위치를 갖는다.

 

beforebegin - Element 앞에

afterbegin - Element첫번째 child

beforeend - Element 의 마지막 child

afterend - Element 뒤에

 

position 에 따라 html_text 로 추가된 html 의 위치가 결정된다.

 

이미 있는 페이지에 레이어 정도 띄워주는 거라면 'afterend' 면 충분할 것 같다.

 

이걸 응용하면 실제 운영중인 페이지에 영향을 주지 않고도 앱에서만 뭔가를 추가로 사용하려 할 때 좋은 것 같다.

반응형
반응형

ps -ef 명령은 너무 많은 프로세스들이 조회되어 찾기가 어렵다.

 

현재 메모리를 가장 많이 점유하고 있는 프로세스 10개만 보려면 아래와 같이 하면 된다.

ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 11

-eo 다음에 나오는 항목들은 프로세스에 대한 정보 항목들이라서 필요한 것만 사용해도 된다.

 

여기에 조금 응용을 해서

특정 문구가 들어간 프로세스 목록을 찾으려면 아래와 같이 하면 된다.

ps -eo user,pid,ppid,rss,size,vsize,pmem,pcpu,time,cmd --sort -rss | head -n 11 | grep '찾고 싶은 문구'

 

head -n 11 을 빼면 찾고자 하는 문구가 들어간 모든 프로세스를 찾을 수 있다.

반응형
반응형

리눅스 계열에서도 크롬을 설치하고 실행할 수 있지만

root 계정인 경우에는 실행이 안 된다.

 

이 경우 수고를 한번 해야 한다.

 

vi /usr/bin/google-chrome-stable

 

또는 자주 쓰는 에디터로 열어서

맨 마지막 줄에 보이는

exec -a "$0" "$HERE/chrome" "$@"

여기에 --user-data-dir --test-type --no-sandbox 옵션을 추가해준다.

 

exec -a "$0" "$HERE/chrome" "$@" -user-data-dir --test-type --no-sandbox

-user-data-dir 만 추가해줘도 된다고 하니 본인에 맞게 사용하면 되겠다.

 

 

같은 이유로 네이버 웨일 브라우저에서는 아래 파일을 열어 같은 옵션을 넣어줘야 한다.

vi /usr/bin/naver-whale-stable

 

반응형
반응형

우분투 데스크톱을 설치하면 바탕화면에 아무것도 없다.

자주 실행하는 앱의 바로가기를 추가하려면 마우스만으로는 쉽지 않다.

 

우선 파일 탐색기를 2개 실행한다.  (괄호의 명칭은 한글판인 경우다)

 

1개는 Home(홈) 에서 Desktop(데스크톱) 폴더를 열어놓는다.

 

다른 1개는 좌측아래 + other location (다른위치)를 눌러 Computer(컴퓨터) / usr / shared / applications 로 이동한다.

 

이제 원하는 앱을 찾아서 먼저 열어놓은 파일 탑색기의 Desktop(데스크톱) 폴더에 복사해야 한다.

문제는 앱이 아이콘과 앱 이름으로 나오는게 아니라 패키지명으로만 나온다.

 

참고로

터미널의 패키지 명은 org.gnome.Nautilus.desktop

파일탐색기의 패키지 명은 org.gnome.Terminal.desktop

 

파일 탑색기의 Desktop(데스크톱) 폴더에 복사를 했다고 끝난 게 아니다.

바탕화면에 아이콘은 안나오고 또 패키지명으로된 메모장 같은 아이콘만 나올 것이다.

 

그 아이콘에서 마우스 오른쪽 버튼을 눌러서 Allow Launching 을 선택해야 제대로된 아이콘이 나오고 실행도 된다.

반응형
반응형

리눅스 쉘에서 자동으로 프로그램을 실행할 때 새로운 창에서 열렸으면 할 때가 있다.

그럴 때 gnome-terminal 을 사용하면 된다.

gnome-terminal --title "title" ./test.sh

--title 옵션은 새창 상단에 제목을 표시해주는데... 내가 쓰는 ubuntu 에서는 안 된다. 에러도 없다.

 

새창이 아닌 새 탭으로 열고 싶을 때는 아래와 같이 --tab 옵션을 붙여준다.

gnome-terminal --title "title" --tab ./test.sh

 

반응형
반응형

System.Data.OleDb.OleDbException : 지정되지 않은 오류입니다.

 

 

Microsoft.ACE.OLEDB.12.0 공급자는 로컬 컴퓨터에 등록할 수 없습니다.

 

위 에러 발생 시 아래 Access Database Engine 2010 재배포 가능 패키지를 설치하면 해결된다.

 

아래 링크에서 두개의 파일을 모두 다운로드 한 후 먼저 64비트용을 설치한 후 32비트용을 설치해야 한다.

 

AccessDatabaseEngine_X64.exe 파일은 마우스 더블클릭으로 설치하고

AccessDatabaseEngine.exe 파일은 이미 설치되어 있기 때문에 마우스 더블클릭으로 설치가 안 된다.

이때 CMD 로 들어가 해당 경로로 이동 후  AccessDatabaseEngine.exe /passive 를 입력하면 설치가 된다.

 

Download Microsoft Access Database Engine 2010 재배포 가능 패키지 from Official Microsoft Download Center

 

Download Microsoft Access Database Engine 2010 재배포 가능 패키지 from Official Microsoft Download Center

중요! 아래에서 언어를 선택하면 전체 페이지 내용이 해당 언어로 신속하게 변경됩니다. 독일어스페인어영어이탈리아어일본어중국어(간체)중국어(번체)프랑스어한국어 다운로드 이 다운로드

www.microsoft.com

 

이렇게 했는데도 안 되는 경우가 있다.

이미 설치가 다 되어 있는 경우인데 계속 에러가 나는 경우도 있다.

 

이런 경우 제어판 > 프로그램 제거 및 변경에 들어가서

Microsoft Access database engine 2010 을 찾아보면 두개가 나오는데

각각 마우스 오른쪽 버튼을 눌러 [복구] 를 실행하면 재설치(?)가 진행되고

두 파일 다 복구한 후에는 에러가 사라질 것이다.

 

반응형
반응형

Selenium 사용 시 아래와 같은 경고 메시지가 표시되는 경우가 있다.

 

WARNING:urllib3.connectionpool:Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000229B1AA7FD0>: Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다')': /session/bf8000eff591a4e17810d9d23c3c91cc/window/handles
WARNING:urllib3.connectionpool:Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000229B1AC3760>: Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다')': /session/bf8000eff591a4e17810d9d23c3c91cc/window/handles
WARNING:urllib3.connectionpool:Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('<urllib3.connection.HTTPConnection object at 0x00000229B1AC3280>: Failed to establish a new connection: [WinError 10061] 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다')': /session/bf8000eff591a4e17810d9d23c3c91cc/window/handles

 

이유는 selenium 의 webdriver 선언을 한 후 반복문에 들어간 후 quit() 로 닫았다가 다시 시도를 하는 경우 발생한다.

driver = webdriver.Chrome('./chromedriver', chrome_options=options)

for i in range(1, 100):
	driver.get("https://url.com")  
	driver.quit()

이런 경우 발생한다.

 

해결방법은 다음과 같이 webdriver 선언을 반복문 안으로 넣으면 된다.

for i in range(1, 100):
	driver = webdriver.Chrome('./chromedriver', chrome_options=options)
	driver.get("https://url.com")  
	driver.quit()
반응형

+ Recent posts