사용자가 theirQuery의 세 사진을 검색하는 데 사용하는 응용 프로그램을 만드는 작업을 맡았습니다. 모든 언어로 작성할 수 있으며 Python이 제안되었습니다. 그러나 Python에 대한 내 GUI 기술은 짜증나고 Java에 가장 익숙하며 사용하려는 Eclipse SWT 패키지를 다운로드했습니다.
좋아, 지금까지 무엇을했는지
나는 간단한 웹 브라우저를 만드는 그들의 예제 코드를 포주했다. Google 이미지를 홈페이지로 표시하고 JavaScript / jQuery를 사용하여 쿼리 작성을 자동화하고 처음 세 개의 사진을 반환 할 계획입니다. (저는 또한 JavaScript / jQuery를 사용하여 세 개의 그림을 반환 할 계획입니다.)
이클립스 SWT에 대한 설명서에 따르면 evaluate()
, execute()
평가하는 데 사용됩니다, 실행 자바 스크립트 : http://help.eclipse.org/indigo/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/ org / eclipse / swt / browser / Browser.html
내가 사용한 코드는 다음과 같습니다.
import org.eclipse.swt.*;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.browser.LocationEvent;
import org.eclipse.swt.browser.LocationListener;
import org.eclipse.swt.browser.ProgressEvent;
import org.eclipse.swt.browser.ProgressListener;
import org.eclipse.swt.browser.StatusTextEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.swt.widgets.ToolItem;
public class BrowserCodeDemo {
public static void main(String[] args) {
Display display = new Display();
final Shell shell = new Shell(display);
GridLayout gridLayout = new GridLayout();
gridLayout.numColumns = 3;
shell.setLayout(gridLayout);
ToolBar toolbar = new ToolBar(shell, SWT.NONE);
ToolItem itemBack = new ToolItem(toolbar, SWT.PUSH);
itemBack.setText("Back");
ToolItem itemForward = new ToolItem(toolbar, SWT.PUSH);
itemForward.setText("Forward");
ToolItem itemStop = new ToolItem(toolbar, SWT.PUSH);
itemStop.setText("Stop");
ToolItem itemRefresh = new ToolItem(toolbar, SWT.PUSH);
itemRefresh.setText("Refresh");
ToolItem itemGo = new ToolItem(toolbar, SWT.PUSH);
itemGo.setText("Go");
GridData data = new GridData();
data.horizontalSpan = 3;
toolbar.setLayoutData(data);
Label labelAddress = new Label(shell, SWT.NONE);
labelAddress.setText("Address");
final Text location = new Text(shell, SWT.BORDER);
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.horizontalSpan = 2;
data.grabExcessHorizontalSpace = true;
location.setLayoutData(data);
final Browser browser;
try {
browser = new Browser(shell, SWT.NONE);
} catch (SWTError e) {
System.out.println("Could not instantiate Browser: " + e.getMessage());
display.dispose();
return;
}
data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.FILL;
data.horizontalSpan = 3;
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
browser.setLayoutData(data);
final Label status = new Label(shell, SWT.NONE);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
status.setLayoutData(data);
final ProgressBar progressBar = new ProgressBar(shell, SWT.NONE);
data = new GridData();
data.horizontalAlignment = GridData.END;
progressBar.setLayoutData(data);
/* event handling */
Listener listener = new Listener() {
@Override
public void handleEvent(Event event) {
ToolItem item = (ToolItem)event.widget;
String string = item.getText();
if (string.equals("Back")) browser.back();
else if (string.equals("Forward")) browser.forward();
else if (string.equals("Stop")) browser.stop();
else if (string.equals("Refresh")) browser.refresh();
else if (string.equals("Go")) browser.setUrl(location.getText());
}
};
browser.addProgressListener(new ProgressListener() {
@Override
public void changed(ProgressEvent event) {
if (event.total == 0) return;
int ratio = event.current * 100 / event.total;
progressBar.setSelection(ratio);
}
@Override
public void completed(ProgressEvent event) {
progressBar.setSelection(0);
}
});
browser.addLocationListener(new LocationListener() {
@Override
public void changed(LocationEvent event) {
if (event.top) location.setText(event.location);
}
@Override
public void changing(LocationEvent event)
{
//System.out.println("Something is happening.");
}
});
itemBack.addListener(SWT.Selection, listener);
itemForward.addListener(SWT.Selection, listener);
itemStop.addListener(SWT.Selection, listener);
itemRefresh.addListener(SWT.Selection, listener);
itemGo.addListener(SWT.Selection, listener);
location.addListener(SWT.DefaultSelection, new Listener() {
@Override
public void handleEvent(Event e)
{
browser.setUrl(location.getText());
System.out.println("New URL loaded");
}
});
shell.open();
browser.setUrl(
"https://www.google.com/imghp?hl=en&tab=wi&ei=m8g4VLndMaz4igKlvoDADg&ved=0CAMQqi4oAQ");
//browser.setVisible(false);
boolean jQueryExecuted = browser.execute("$(\'#lst-ib\').val(\'snopes\')");
if (!jQueryExecuted)
{
System.out.println("Your jQuery didn't execute.");
}
jQueryExecuted = browser.execute("$(\'[name=btnG]\').click()");
if (!jQueryExecuted)
{
System.out.println("Your jQuery didn't execute.");
}
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
텍스트 필드를 자동으로 설정하려고했지만 Java와 브라우저 모두에서 실패했기 때문에 문제가 코드 자체라고 생각하지 않습니다. / * 텍스트 필드의 이름은 "lst-ib"입니다. * /
무엇을 웹 스크랩하려고합니까?
Google 이미지를 웹 스크랩하려고합니다 : https://www.google.com/imghp?hl=ko&tab=wi&ei=m8g4VLndMaz4igKlvoDADg&ved=0CAMQqi4oAQ .
텍스트 필드는 이름이 "lst-ib"인 입력입니다. 버튼은 이름이 "btnG"인 입력입니다. 텍스트 필드는 ID가 "gs_lc0"인 div 내에 있습니다. (동일한 크기의 다른 입력 요소도 여러 개 있습니다.)
오 와우. 10 시간이 지났고 나 외에는 아무도 댓글을 달지 않았습니다. 문제는 내가 생각했던 것보다 훨씬 더 크다는 것이 밝혀졌습니다. Eclipse SWT의 브라우저는 jQuery를 실행할 수 없습니다.
다행히도 JavaScript로 작성되었으며 더 이상 사용되지 않지만 여전히 작동하는 Google Image API를 찾았습니다. 또한 페이지에서 몇 가지 간단한 소스 코드를 찾았습니다. https://developers.google.com/image-search/v1/devguide#hiworld
나는 변경 newImg.src = "/image-search/v1/result.tbUrl;"
에 newImg.src = result.tbUrl;
이미지를로드 할 수 있도록. 이것은 모든 것을 바꿉니다.
새로운 계획은 무엇입니까?
이제 Java에서이 코드를 사용할 계획입니다. src를 JavaScript 코드가 사용하는 Google Image API 인 src로 변경 한 다음 코드를 호출하여 처음 세 개의 이미지를 가져올 계획입니다. 이것이 자바에서 자바 스크립트 를 실행하는 방법 입니다. 자바 프로그래밍에서 자바 스크립트를 실행하는 방법 입니다. Java가 사용하는 JavaScript 엔진의 src를 https://www.google.com/jsapi 로 변경하는 방법을 알아낼 수만 있다면
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다